防止同一机构上的碰撞器彼此碰撞,但允许它们与其他机构发生碰撞。

3
我有一个预制的NPC,它附带了物理骨架(用于执行一些特定的布娃娃效果)。我需要避免同一骨架上的不同碰撞器(例如手臂、腿等)之间发生碰撞,但它们必须能够与其他实例化的NPC的骨架发生碰撞。
有没有办法做到这一点呢?我知道我可以通过将所有碰撞器放在单独的层中来避免它们之间的碰撞,但我不能为每个NPC创建新的层。
谢谢。
2个回答

4
你可以通过在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
看起来在不使用层的情况下忽略碰撞的唯一方法是对每一对碰撞器使用 Physics.IgnoreCollision()
您可以编写一些代码,自动注册新实例化的游戏对象并在新对象和之前注册的其他对象之间创建这些对,这样您就不需要自己为每个对调用此方法。
或者,您可以使用 此代码,它会为您完成这项工作 :) 它具有自己的 layer 表示形式,以控制对象如何彼此忽略。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接