【问题标题】:Unity c# - NullReferenceException: Object reference not set to an instance of an objectUnity c# - NullReferenceException:对象引用未设置为对象的实例
【发布时间】:2023-03-20 08:33:01
【问题描述】:

我在runtime 期间有一个error,我的imagetext。我在我的hierarchy 中创建了两个对象,命名正确,但显然我的脚本找不到它们。为什么我写的还不够?我在error 中得到的只是Object reference 没有设置为对象的实例,但我不明白为什么当我的层次结构中有一个对象时我需要创建该对象的实例。 我对 unity 和 c# 都还比较陌生,并且无法通过搜索找到任何真正的解释性答案,而且 unity 教程也不是很有帮助,因为我确信这只是一个关于 c# 的基本问题

private Text serverInfoText;
private GameObject serverInfoImage;

void Awake()
{
    serverInfoImage = GameObject.Find ("ServerInfoImage");
    serverInfoImage.SetActive (false);
    serverInfoText = GameObject.Find("ServerInfoText").GetComponent<Text>();
}

【问题讨论】:

  • 是否已将此脚本附加到场景中的游戏对象?如果没有,那就去做吧!

标签: c# unity3d


【解决方案1】:

不看你的场景就不可能说出来。

要尝试的事情:

  • GameObject.Find 仅适用于活动游戏对象。确保游戏对象在您的场景视图中没有变灰。
  • 仔细检查名称字符串是否正确,并使用Debug.Log 进行完整性检查。
  • 您没有提及实际异常发生在哪一行。在上面的代码中,可能会在两个位置引发异常:如果serverInfoImage 为空,则在SetActive() 上,或者如果找不到ServerInfoText 对象,则在GetComponent&lt;Text&gt;() 上。阅读您收到的实际异常消息,并确保您查看的是正确的行/对象。
  • 由于已经在场景中创建了对象,因此使用GameObject.Find 获取对对象的引用没有任何好处。通过检查器直接设置对对象的引用会更有效。此选项具有使用禁用的游戏对象的额外好处。要么将你的两个成员变量设为私有,要么使用 SerializeField 属性使属性在检查器中可见。

【讨论】:

  • 谢谢!这是因为我忘记在检查器中附加脚本,并且因为我禁用了图片
  • 我还发现我的(可能是最大的)问题是我试图通过同时唤醒使用 GameObject.Find 和 SetActive(false) 来查找,当我把 SetActive(false) ) 在 Start() 中解决了问题
猜你喜欢
  • 2014-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-22
  • 2022-08-13
  • 2013-04-19
  • 2016-06-05
  • 1970-01-01
相关资源
最近更新 更多