我正在使用 unity 来开发我的游戏。我创建了一个简单的游戏,就像足球一样,进球后球应该被摧毁,然后重新出现在原来的位置。
我已将此脚本附加到我的目标对象。
public GameObject ball;
Vector3 ballPosition = new Vector3 (4.51f,0.10f,-3.78f);
void OnTriggerEnter(Collider other)
{
StartCoroutine ("RespwanBall");
}
IEnumerator RespwanBall() {
GameObject clone = (GameObject)Instantiate (ball, ballPosition, Quaternion.identity) as GameObject;
Destroy (ball.gameObject);
yield return null;
}
但它仅在第一次有效。然后在第二次销毁之后,它会给出一个错误,指出该对象已被删除,并且您正在尝试访问已删除的对象或类似的内容。如果我在 OntriggerEnter 函数中使用 destroy 函数,它会在第一次碰撞期间给出相同的错误。
我该怎么做?请帮忙。
谢谢。
最佳答案
您正在尝试访问已删除的对象,因为您将脚本附加到球门,并且您始终删除球,并且您的克隆永远不会成为球(因此它始终是同一个球)。
如果脚本附加到球上,它就会起作用,因为在这种情况下,球将是其本身,因此销毁方法将始终在事件球中激活。
如果您想将其附加到球门,请确保将您的克隆更新为事件球:
IEnumerator RespwanBall() {
Destroy (ball.gameObject);
ball = (GameObject)Instantiate (ball, ballPosition, Quaternion.identity);
yield return null;
}
此外,BlueRaja 的注释非常重要,您可以使用它们来改进代码:
ball.GameObject
可能只是ball
,因为ball
是 一个GameObject
>;- 您正在两次实例化结果,请检查 this question to know more关于它;
- 至少在这段代码中,RespwanBall 没有理由成为协程;
- 您拼错了“Respawn”。
关于c# - Unity - 如何在销毁后重生游戏对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21504466/