Unity:在 Parent 脚本中检测 Child 触发器

Unity: Detect Child Trigger inside Parent Script

我目前正在学习如何在 Unity 中制作游戏,我想检测 Child 的对撞机何时被触发以对被击中的物体造成伤害。但我对它的工作原理感到困惑。

Parent 的碰撞器未被触发,但 Child 的碰撞器被触发。 Child object 也没有附加刚体

你说的叫self-collision。处理这个问题的一种方法是忽略某些碰撞器,看看 documentation here.

如果我对你的理解正确的话,你有一个像这样的 GameObject 层次结构:

parentGO (contains player mesh and Capsule Collider 2D)
|-childGO (contains attack mesh and Mesh Collider 2D)

我会附加到 childGO 一个脚本,它应该在其多边形碰撞器上注册碰撞并通知武器脚本 parentGO 被击中的物体。然后武器可以对目标造成伤害。

我没有足够的声誉来发表评论,所以我要回答。 我认为这里也得到了回答:.

如果子碰撞不在父碰撞内,则无需为父碰撞设置 IsTrigger = true,只需为碰撞尝试不同的层即可。

这是 Unity 文档:https://docs.unity3d.com/Manual/LayerBasedCollision.html

我知道你很可能得到了你的回应,但也值得一提的是,也许你应该考虑分离这些对象并将它们附加到新的游戏对象,它有一个包含两个碰撞器的脚本 - 这可能会更多可靠且易于阅读。

您可以使用Collider2D.IsTouching(Collider2D other);

Here is documentation for IsTouching

或者编写使用观察者的自定义脚本并通知主游戏对象发生了碰撞。

private Action _onGameObjectCollided;
private void OnTriggerEnter2D(Collider2D col){
    if(col.gameObject.CompareTag("TAG")
        _onGameObjectCollided?.Invoke();
}
public void AddOnColliderEnterObserver(Action observer)
{
    _onGameObjectCollided += observer;
}

public void RemoveOnColliderEnterObserver(Action observer)
{
    _onGameObjectCollided -= observer;
}

在新游戏对象中:

collider.AddOnColliderEnterObserver(MethodToCallOnTriggerEntered);