【发布时间】:2018-06-17 01:50:20
【问题描述】:
我尝试了两种销毁预制游戏对象的方法,但似乎都不起作用。我希望在调用 Spawn 方法时实例化对象,然后在 timeOfTravel 变量的浮点值过去后销毁。首先,我尝试使用以下代码实例化对象的相同方法:
void Spawn () {
Vector2 spawn = new Vector2 (gameObject.transform.position.x, gameObject.transform.position.y);
GameObject ballInstance = Instantiate (ball, spawn, Quaternion.identity, parent);
Destroy (ballInstance.gameObject, ballInstance.GetComponent<Ball>().timeOfTravel);
}
但游戏对象永远不会被销毁,它只是位于层次结构中。 所以我尝试在附加到预制件的脚本中运行这个简单的行,但它也没有从层次结构中删除对象:
void Start () {
Destroy (gameObject, timeOfTravel);
}
正在实例化的预制件是 UI 画布上的 Image 对象,如果这有所不同的话,但我不知道为什么它们没有被销毁。我想我可能没有正确引用对象实例?
【问题讨论】:
-
您的第一个案例可能是一个问题,但您的第二个案例对我来说看起来不错。如果您使用的是 Visual Studio,则可以在第二个示例中设置断点,然后附加到 Unity 以查看这些值发生了什么。然而,在第一个示例中,当您实例化一个对象时,它并没有立即完全设置好。很多初始化发生在下一帧更新之前。因此,您可能正在尝试破坏尚未完全形成的对象。它可能是您对自身的 .gameObject 引用。组件(球)也可能尚未设置。
-
您的代码在逻辑上看起来是正确的。也许让您的游戏对象成为一个空对象的子对象,然后销毁该对象。
-
这个有什么更新吗?我遇到了同样的问题。
标签: unity3d