【问题标题】:Prefab game object isn't being Destroyed预制游戏对象没有被销毁
【发布时间】: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


【解决方案1】:

您是否尝试使用“Destroy(this.gameobject);”立即销毁游戏对象?也许您的“timeoftravel”功能有问题。

【讨论】:

  • 我也试过this.gameObject,但没有成功。 timeOfTravel 只是一个浮点数,而不是一个函数。它使用了 2 参数 Destroy 构造函数,该构造函数将延迟时间作为浮点数
  • 你的逻辑看起来不错。我不知道的一件事是在实例化时将游戏对象分配给父级是否会改变一些逻辑。我会尝试从这里删除“父级” GameObject ballInstance = Instantiate (ball, spawn, Quaternion.identity, parent);,然后尝试它是否有效。如果不是,我不知道为什么这不起作用......
  • 它需要以 Canvas 为父对象才能显示 Image 对象
猜你喜欢
  • 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
相关资源
最近更新 更多