如果一个人在刚体内部,Unity Collision 不会按预期工作

Unity Collision doesn't work as expected if one is inside a Rigidbody

我使用的是 Unity 2019.4.17f1,我有两个带有碰撞器的对象,我想检测其中一个是否与另一个发生碰撞,因此应该对两个对象调用 OnCollisionEnter(尽管我真的只关心它是否碰撞)调用另一个立方体,因为第一个将只是一个控制器,以便第二个对撞机在检测到控制器与其发生碰撞后执行某些操作)。为了进行测试,我有一个包含三个立方体的场景:

以及下一个代码包含在三个立方体中的组件:

public string text;

private void OnCollisionEnter(Collision collision)
{
    Debug.Log("Collision made: " + text);
}

他们每个人都有一个文本变量,其中包含他们所拥有的颜色的名称,因此当他们发生碰撞时,他们将显示具有碰撞颜色的文本,那里也只有两个刚体,一个在蓝色立方体内部,另一个在Rb GameObject中,两者都没有重力

但是正如您在上一张图片中看到的那样,只显示了蓝色和红色的调试文本,因此当蓝色与绿色碰撞时,只有蓝色做出反应,如果蓝色与红色碰撞,则同时显示蓝色和红色。如果对象是刚体的子对象,为什么它的反应不同?我该怎么做才能使绿色也对碰撞做出反应?

编辑:

我还测试了红色立方体上是否有刚体并且它按预期工作(出现蓝色和红色消息)所以我不明白为什么绿色也不起作用。

EDIT2:

这是 Rb 游戏对象:

还有绿色游戏对象:

来自Unity colliders documentation

Compound colliders approximate the shape of a GameObject while keeping a low processor overhead. To get further flexibility, you can add additional colliders on child GameObjects. For instance, you can rotate boxes relative to the local axes of the parent GameObject. When you create a compound collider like this, you should only use one Rigidbody component, placed on the root GameObject in the hierarchy.

确保您的 DetectCollider 脚本和 RigidBody 组件附加到根游戏对象,在本例中是 Rb。碰撞事件从碰撞器传递到附加的或父刚体,因此您的 CollisionScripts 应该相应地附加。还要确保 Green GameObject 没有附加 Rigidbody,这样事件就会传递给 Rb 中的父 Rigidbody。

在这种情况下,您有 DetectCollision 附加到子绿色游戏对象,但 RigidBody 附加到 Rb,这意味着碰撞事件传递给 Rb 游戏对象而不是绿色游戏对象。