Unity销毁函数异常:碰撞后道具GameObject未被销毁
Unity中Destroy函数失效问题解决
核心问题
你的Move脚本里的flash变量既未声明,也没有从碰撞事件中获取对应的道具对象,调用Destroy(flash)本质是尝试销毁一个空引用,因此道具不会被销毁。
修正代码
直接通过碰撞参数collision获取到道具对象并销毁即可,修改OnCollisionEnter2D方法如下:
private void OnCollisionEnter2D(Collision2D collision) { if (collision.gameObject.CompareTag("item")) { Speed = 40f; // 销毁当前碰撞到的道具对象 Destroy(collision.gameObject); Invoke("timeout", 5); } }
额外验证项
- 确认道具对象的
Collider2D组件处于启用状态,且玩家或道具对象至少有一个带有Rigidbody2D组件(否则OnCollisionEnter2D事件不会触发)。 - 道具对象的Tag确实设置为
item,与代码中的判断条件一致。
内容的提问来源于stack exchange,提问作者Kilian
相关产品推荐
相关产品推荐

