防止同一钻机上的对撞机相互碰撞。但允许它们与其他钻井平台发生碰撞。

Preventing colliders on the same rig from colliding with each other. But allowing them to collide with other rigs.

我有一个预制 NPC,它附有一个物理装置(用来做一些特定的布娃娃)。我需要避免同一装备(手臂、腿等)上的各种碰撞器相互碰撞,但它们必须能够与其他实例化 NPC 的装备发生碰撞。

有办法吗?我知道我可以通过将所有碰撞器放在一个单独的层上来避免所有碰撞器发生碰撞,但我无法为每个 NPC 创建一个新层。

谢谢

你可以通过在你的 NPC class 上设置 IgnoreCollision 来做到这一点

http://docs.unity3d.com/ScriptReference/Physics.IgnoreCollision.html

如此简单地遍历装备中的所有碰撞器并设置为相互忽略

void Start() {

    colliders = GetComponentsInChildren<Collider>();
    foreach(Collider collider in colliders) {

        otherColliders = GetComponentsInChildren<Collider>();
        foreach(Collider otherColider in otherColliders) {

            if (collider != otherColider) {
                Physics.IgnoreCollision(collider, otherColider);
            }
        }
    }
}

看起来不使用图层来忽略碰撞的唯一方法是在一对碰撞器之间使用 Physics.IgnoreCollision(),对于每一对。

您可以编写一些代码来自动注册一个新实例化的游戏对象,并在新对象和之前注册的其他对象之间创建这些对,这样您就不需要自己为每个对调用此方法.

或者,您可以使用 this code 为您做到这一点 :) 它有自己的 layer 表示来控制对象如何相互忽略。