【发布时间】:2019-05-03 21:54:27
【问题描述】:
我无法让一个脚本从另一个脚本调用实例化函数。下图说明了我是如何设置游戏对象的。
我有 2 个对象,Thing1 和 Thing2,它们根据附加到每个对象的移动脚本在屏幕上移动。 Thing1 还附上了一个反应脚本。当 Thing1 和 Thing2 发生碰撞时,Thing 3 应该会出现。 Thing3 附加了一个实例化脚本,其中包含一个带有实例化命令的函数。
当我在实例化脚本中调用实例化函数时(我把它放在 Thing3 的 Start 函数中),它工作正常。但是,当我将它从那里取出并尝试将其放入附加到 Thing2 的反应脚本的 Start 函数中时,我无法让它工作。目前,我在编译时没有收到任何错误,但游戏一开始我就得到以下信息(Thing1 和 Thing2 的行为似乎也受到了不利影响):
"NullReferenceException: Object reference not set to an instance of an object"
当我查找该错误的原因时,我发现最典型的原因是预制对象未附加到脚本。但是,我确实在脚本上附加了一个预制件。它附加到包含实例化函数的实例化脚本中。
下面是实例化脚本的代码和在实例化脚本中调用实例化函数的反应脚本。
//Instantiation
public class Thing3Instantiation : MonoBehaviour
{
public GameObject thing3Obj;
void Start()
{
//CreateThing3();
}
public void CreateThing3()
{
Instantiate(thing3Obj);
}
}
和
//Reaction
public class Reaction : MonoBehaviour
{
private Thing3Instatiation thing3instantiation;
void Awake()
{
thing3instantiation = GetComponent<Thing3Instantiation>();
}
void Start()
{
thing3instantiation.CreateThing3(); //This line triggers the null error
}
关于我做错了什么有什么想法吗?
【问题讨论】:
-
错误消息应该告诉您错误是异常发生的确切行;您应该在代码示例中标记该行。
-
另外,我要继续猜测你的
Reaction脚本中的空引用是transition。它是如何定义的,又是如何设置的? -
已编辑。
transition.CreateTransition应该是thing3instantiation.CreateThing3。
标签: c# function unity3d instantiation