Unity - 如何从 parent GameObject 检测 child object 上的碰撞?

Unity - How to detect collision on a child object from the parent GameObject?

我正在使用 Unity 5 制作 2D 游戏,但 child GameObject collider 有问题。我想检测 Child GameObject 与另一个 object 之间的碰撞,从 parent 脚本并使用标签执行此操作。

按照下面我的 parent 脚本操作:

 void OnCollisionEnter2D(Collision2D hit) {

    if(hit.transform.tag == "Enemy"){

        this.playerRigidbody.AddForce(new Vector2(0, this.forceJump));

    }

 }

"Enemy" 标签是另一个 object 标签,它与我的播放器 child 的碰撞器发生碰撞。我想检测 child object 和另一个 object 之间的碰撞,我在许多类似的关于 Unity 的论坛中搜索但我无法解决我的问题。有人可以帮我解决这个问题吗?

发生碰撞时,Unity 将在层次结构中搜索最近的刚体 和运行 同一游戏对象上的任何脚本。

所以,简单的方法是 确保刚体在 parent object 与脚本。这是一个示例层次结构:

  • Parent
    • Child一个
      • ChildB

Parent 有:

  • 一个二维刚体
  • 脚本

Child B 有:

  • 盒子对撞机 2D

当盒子碰撞器与某物发生碰撞时,事件将直接通过 Child A 冒泡并被 parent 上的刚体接收,然后将导致脚本 运行.

如果你不能把刚体放在parent..

出于性能原因,Unity 不会将事件在层次结构中向上冒泡。所以,你的其他选择是..

  • 将脚本添加到 child 以捕获碰撞并在那里进行处理。如果需要,您可以像这样将事件转发到 parent 脚本:

    void OnCollisionEnter2D(Collision2D hit) {
    
        // Forward to the parent (or just deal with it here).
        // Let's say it has a script called "PlayerCollisionHelper" on it:
        PlayerCollisionHelper parentScript = transform.parent.GetComponent<PlayerCollisionHelper>();
    
        // Let it know a collision happened:
        parentScript.CollisionFromChild(hit);
    
    }
    
    • 或者 "another" object 上的脚本,以便从它的角度捕捉碰撞事件。

确保子对象没有刚体并确保对撞机属性正确。查看此 article 中的复合碰撞器部分,了解有关在子对象中组合碰撞器的更多信息。