使用Destroy()函数时,我得到了失踪患者遗症

时间:2019-06-18 09:22:41

标签: c# unity3d

我正在尝试制作射击游戏,我想为子弹设定射程。这意味着当它被射击时,它会飞行一段时间,然后被摧毁。

我已经尝试过Destroy函数;但是,我实现代码的方式看起来像是试图从发射点摧毁原始子弹,而不是在射程的尽头。

这是我的代码:

if (Input.GetKey("space"))
{
    Instantiate(bullet, transform.position + new Vector3(0, 0, 1), bullet.rotation);
    Destroy(bullet, 0.4f);
}

它将启动一次,然后我得到MissingReferenceException

1 个答案:

答案 0 :(得分:2)

您破坏了预制件。实例化时,您会得到一个参考,那就是您要销毁的实际游戏对象。

if (Input.GetKey("space"))
{
    GameObject bulletInstance; //or whatever type your bullet is
    bulletInstance = Instantiate(bullet, transform.position + new Vector3(0, 0, 1), bullett.rotation);
    Destroy(bulletInstance , 0.4f); //if you instantiated via a component, you have to destroy bulletInstance.gameObject or you'll only destroy the component
}

https://docs.unity3d.com/Manual/InstantiatingPrefabs.html

编辑:请注意,这会产生大量垃圾,仅是为了回答您的问题,您应该考虑将对象池用于项目符号。 https://learn.unity.com/tutorial/object-pooling