Unity中OnTriggerEnter为什么没有触发

OnTriggerEnter() 不触发的问题:
两个游戏对象,Hero和Enemy
Hero的有一个子对象Shield具有Sphere Collider组件并且Is Trigger已经勾选。
Hero和子对象都设置在一个Hero的Layer中

img

Enemy及其子对象都设置在Enemy的Layer中,Physics也设定了两个层级可以发生碰撞

img

Hero脚本中代码:


 void OnTriggerEnter(Collider other)
    {

        Transform rootT = other.gameObject.transform.root;
        GameObject go = rootT.gameObject;
        print("Triggered" + go.name);
    }

为什么跑起来之后Hero和Enemy相遇总是不能够触发OnTriggerEnter呢?

你的hero和enemy两者符合:双方均有碰撞体至少一方有刚体吗?

OnTriggerEnter是Unity中的一个事件函数,通常用于当两个碰撞器相接触时触发。如果该函数没有被触发,可能是以下原因之一:

  1. 碰撞器没有被正确地设置为触发器。在Unity中,需要将一个碰撞器的Is Trigger属性设置为True,才能使其变为触发器,然后才能触发 OnTriggerEnter 事件。

  2. 碰撞器的位置或大小不正确。在碰撞器的位置或大小被设置不正确的情况下,可能会导致触发的问题。

  3. 碰撞器的刚体组件没有被正确设置。 如果将一个无刚体组件的游戏对象与带刚体组件的游戏对象相撞,则不会触发 OnTriggerEnter 事件。

  4. 碰撞器的层或标签没有被正确设置。需要检查碰撞器的层或标签是否与其他碰撞器匹配。

  5. 刚体没有足够的速度来创造接触,并且触发要求未满足。在Unity中,要求两个碰撞器必须至少具有一方具有刚体组件,并且至少其中一个刚体必须是动态刚体。

如果您已检查了以上原因但仍无法解决问题,建议检查代码中是否存在其他问题或错误。