【问题标题】:Preventing colliders on the same rig from colliding with each other. But allowing them to collide with other rigs.防止同一台钻机上的碰撞器相互碰撞。但允许它们与其他钻机发生碰撞。
【发布时间】:2015-07-27 09:35:39
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: unity3d game-physics


    【解决方案1】:

    如果你有的话,你可以通过在你的 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);
                }
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多