Unity 2D游戏开发:碰撞销毁对象时如何排除父物体
Unity 2D碰撞销毁排除父物体的解决方案
直接用Unity自带的transform.parent属性就能判断碰撞对象是不是当前物体的父物体,修改你的代码即可解决问题:
修改后的代码示例
如果用的是普通碰撞器(未勾选Is Trigger):
void OnCollisionEnter2D(Collision2D other) { // 先判断是不是父物体,是就直接跳过 if (other.transform == transform.parent) return; if (other.CompareTag("Room")) { Destroy(other.gameObject); Debug.Log("Room Destroyed"); } }
如果用的是触发器(勾选了Is Trigger):
void OnTriggerEnter2D(Collider2D other) { if (other.transform == transform.parent) return; if (other.CompareTag("Room")) { Destroy(other.gameObject); Debug.Log("Room Destroyed"); } }
额外说明
- 启动游戏就销毁父物体的原因,大概率是初始状态下碰撞检测就触发了和父物体的接触,加了父物体判断后就能直接过滤掉这种情况。
- 要是你需要排除父物体以上的层级(比如爷爷节点),可以用
other.transform.IsChildOf(transform.root)来判断,但从你的问题描述看,直接判断transform.parent就够解决当前需求。
内容的提问来源于stack exchange,提问作者Por5as
相关产品推荐
相关产品推荐

