我正在Unity的冒险游戏中遇到这个小错误。我正在尝试访问实例化对象中的脚本。以下是相关的代码行:
public void CastAbility(Vector3 targetLocation) {
print (targetLocation);
var target = Instantiate (prefab2, transform.position, transform.rotation) as GameObject;
Initialize initialize = target.GetComponent<Initialize> ();
initialize.targetLocation = targetLocation;
}
根据我的理解,第一行代码将创建一个名为prefab2的游戏对象。 第二行代码将允许我访问prefab2中的组件(A脚本)。 第三行将改变prefab2脚本中的变量。
这对我来说似乎合乎逻辑,但是我得到了一个 “对象引用未设置为对象的实例”错误。
以下是一些细节,如果这有助于找到解决方案。
如果我只使用Instantiate,并省略了target.GetComponent,prefab2将会产生并且不会给我任何错误......事实上,附加到prefab2的Initialize脚本工作正常。
我从实例化的子对象调用CastAbility函数。
我尝试过去4个小时找到解决方案,但无济于事。 任何帮助将不胜感激。
答案 0 :(得分:1)
我找到了解决方案,游戏对象被存储为变换,而不是游戏对象。这让我感到困惑,因为我正在运行的类似脚本也使用了转换(工作得很好)。