You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 05:47:04