【问题标题】:Unity - GetComponent on Instantiated Object returning NullUnity - 实例化对象上的 GetComponent 返回 Null
【发布时间】:2016-11-05 08:23:18
【问题描述】:

我正在尝试访问在我的脚本中实例化的另一个游戏对象上的脚本,无论我做什么,脚本总是返回 null。

我首先通过这样做来实例化游戏对象。

asteroid = (GameObject)Instantiate(asteroidPrefab);

之后我尝试通过这样做来访问它的脚本:

AsteroidHandler handler = (AsteroidHandler)asteroid.GetComponent(typeof(AsteroidHandler));

为了检查处理程序是否设置正确,我这样做了:

if(handler == null){
    Debug.Log("Asteroid Handler is Null");
}else{
    Debug.Log("Asteroid Handler was setup properly");
}

问题是这总是空选项。我将 AsteroidHandler 脚本附加到 asteroidPrefab 预制件上,当我实例化它时,它会正确实例化,因为我在屏幕上看到了小行星。仍然当我尝试访问附加到它的 AsteroidHandler 脚本时,它似乎不存在;

我尝试了其他几种访问 AsteroidHandler 的方法,但他们都说它为 null:

AsteroidHandler handler = (AsteroidHandler)asteroid.GetComponent<AsteroidHandler>();

.

AsteroidHandler handler = (AsteroidHandler)asteroid.GetComponent(typeof(AsteroidHandler)) as Asteroid Handler;

我查看了其他几个与我类似的问题,但似乎没有一个答案有帮助。

任何帮助将不胜感激。

【问题讨论】:

  • 你确定你的预制件上有脚本
  • 检查是否所有东西都附加到预制件上并保存在项目中(不仅仅是层次结构)

标签: c# unity3d nullreferenceexception


【解决方案1】:

再简单不过了,

添加此代码

asteroid = (GameObject)Instantiate(asteroidPrefab);
// add this...
asteroid.name = "Added test item";

运行程序并等待,直到您看到“添加的测试项”

检查,你是否也看到“Asteroid Handler is Null”

现在,从字面上查看场景的层次结构,并找到名为 Added test item

的对象

仔细观察 Inspector,看看你看到了什么。

【讨论】:

  • 呃,我太笨了。当我这样做时,更改为“添加测试项”的对象是另一个对象。基本上,我在统一编辑器中为 asteroidPrefab 放入的预制件不是正确的预制件,因此它没有脚本。这绝对是测试您的实例化对象是否已正确实例化并且它是正确的对象 XD 的好方法。谢谢你,很抱歉浪费你的时间来解决这样一个愚蠢的问题。
  • 你一点也不傻,你显然是一个天生有才华的开发人员,因为你做的第一件事就是添加一个 Debug.Log 行,正如你提到的那样。杰出的!这就是卓越的标志。干杯!
  • 如果您是 Unity 新手,这里有一篇非常有用的帖子 stackoverflow.com/questions/35890932/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多