Unity子弹脚本问题:GameObject无法转Rigidbody且子弹销毁失效
Unity子弹脚本问题修复
问题1:"GameObject无法转换为Rigidbody"报错
原因:bulletthing是GameObject类型变量,但你直接把Rigidbody类型的bulletClone赋值给它——Rigidbody是挂载在GameObject上的组件,不能直接转换为GameObject。
修复:通过bulletClone.gameObject获取组件所属的GameObject再赋值。
问题2:子弹4秒后自动销毁失效
原因:连续发射多颗子弹时,bulletthing变量会被新的子弹GameObject覆盖,之前调用的Invoke最终只会销毁最后一颗子弹,无法对应每颗子弹的销毁逻辑。最可靠的方式是直接使用Destroy方法的延时重载,无需额外变量和Invoke。
修正后的完整代码
using UnityEngine; using System.Collections; public class ShootGun : MonoBehaviour { public float bulletSpeed = 10; public Rigidbody bullet; public float bulletlifetime = 4; void Fire() { Rigidbody bulletClone = Instantiate(bullet, transform.position, transform.rotation); bulletClone.velocity = transform.right * bulletSpeed; // 直接延时销毁子弹的GameObject Destroy(bulletClone.gameObject, bulletlifetime); } void Update () { if (Input.GetButtonDown("Fire1")) { Fire(); } } }
可选方案(保留Invoke逻辑)
如果坚持使用Invoke,需要为每颗子弹单独绑定销毁逻辑,比如给子弹添加专属脚本处理自身销毁,但上面的Destroy重载是最简洁高效的实现方式。
内容的提问来源于stack exchange,提问作者CoderSpek
相关产品推荐
相关产品推荐

