unity3d 错误:空引用异常:对象引用未设置为对象UNITY 3D GALLERY PROJECT的示例[重复]

oyjwcjzk  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(175)

此问题在此处已有答案

What is a NullReferenceException, and how do I fix it?(27个答案)
昨天关门了。
我正在学习使用Unity,我目前正在做“个人3D画廊项目”,这里是链接,如果你想看看它:https://learn.unity.com/project/create-a-personal-3d-gallery-project-with-unity?uv=2019.4
然而,我并没有在我的画廊里展示艺术作品,而是展示行星,我的目标是当玩家接近其中一个行星时,弹出一个关于该行星的信息文本。为了实现这一点,我正在使用Unity网站中提供的接近度脚本,并进行了一些更改。一切似乎都工作正常,但当我接近行星的文字没有显示,我不断收到这个错误:
空引用异常:对象引用未设置为对象的示例
Proximity.Start()(位于资产/脚本/Proximity.cs:32)
显然问题出在第32行,但我不知道是什么原因造成的。我将附上图片,以便更好地了解问题和我的代码。
我真的很感激你的帮助,因为这是一个最后的项目,谢谢你这么多提前。

以下是我的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Proximity : MonoBehaviour
{
    public string newTitle;
    public string newNumber;
    public string newInfo;
    private Transform other;
    private Text myTitle;
    private Text myNumber;
    private Text myInfo;
    private float dist;
    private GameObject player;
    private GameObject message1;
    private GameObject message2;
    private GameObject message3;
    private bool check;

    // Start is called before the first frame update
    void Start()
    {
        player = GameObject.FindWithTag("Player");
        other = player.GetComponent<Transform>();
        message1 = GameObject.FindWithTag("PlanetTitle");
        message2 = GameObject.FindWithTag("PlanetNumber");
        message3 = GameObject.FindWithTag("PlanetInfo");
        myTitle = message1.GetComponent<Text>();
        myTitle.text = "";
        myNumber = message2.GetComponent<Text>();
        myNumber.text = "";
        myInfo = message3.GetComponent<Text>();
        myInfo.text = "";
        check = false;
    }

    // Update is called once per frame
    void Update()
    {
        if (other)
        {
            dist = Vector3.Distance(transform.position, other.position);
            print("Distance to player: " + dist);
            if (dist < 4)
            {
                myTitle.text = newTitle;
                myNumber.text = newNumber;
                myInfo.text = newInfo;
                check = true;
            }
            if (dist > 4 && check == true)
            {
                Start();
            }
        }
    }
}

这就是我要做的

但这就是当我接近行星(或者在这种情况下是月球)时它的样子

这位是我的检查员,以防问题可能在那里

我多次检查我的代码,并将其与原始代码进行比较,我认为我做了所有必要的修改,但显然有一些错误。

o7jaxewo

o7jaxewo1#

在设置属性文本之前,myTitle不会初始化。请在Awake中分配所需的组件来初始化它。

void Awake()
{
    player = GameObject.FindWithTag("Player");
    other = player.GetComponent<Transform>();
    message1 = GameObject.FindWithTag("PlanetTitle");
    message2 = GameObject.FindWithTag("PlanetNumber");
    message3 = GameObject.FindWithTag("PlanetInfo");
    myTitle = message1.GetComponent<Text>();        
    myNumber = message2.GetComponent<Text>();
    myInfo = message3.GetComponent<Text>();
}

void Start()
{       
    myTitle.text = "";
    myNumber.text = "";
    myInfo.text = "";
    check = false;
}

相关问题