防止同一装备上的碰撞器相互碰撞。但允许它们与其他装备碰撞。

时间:2015-07-27 09:35:39

标签: unity3d game-physics

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

有办法做到这一点吗?我知道我可以通过将它们放在一个单独的层上来避免碰撞所有碰撞器,但我不能为每个NPC创建一个新层。

由于

2 个答案:

答案 0 :(得分:3)

如果您有任何

,可以在NPC课程上设置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);
            }
        }
    }
}

答案 1 :(得分:1)

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

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

或者,您可以使用this code为您执行此操作:)它有自己的 layer 表示来控制对象应该如何相互忽略。