我正在尝试制作射击游戏,我想为子弹设定射程。这意味着当它被射击时,它会飞行一段时间,然后被摧毁。
我已经尝试过Destroy
函数;但是,我实现代码的方式看起来像是试图从发射点摧毁原始子弹,而不是在射程的尽头。
这是我的代码:
if (Input.GetKey("space"))
{
Instantiate(bullet, transform.position + new Vector3(0, 0, 1), bullet.rotation);
Destroy(bullet, 0.4f);
}
它将启动一次,然后我得到MissingReferenceException
。
答案 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