Box collider里面的Box collider影响游戏性能?

Box collider inside Box collider affects game performance?

我打算创建一个空的游戏对象,并在其中为我的触摸传感器附加一个盒子碰撞器,然后在它的内部是另一个带有盒子碰撞器的空游戏对象,用于检测碰撞。这是否会影响游戏性能,因为每次更新都会检测到碰撞?请不要说只是删除内部游戏对象然后将碰撞附加到外部游戏对象。

如果你担心两个对撞机每一帧都会相互碰撞,那大可不必担心。您可以将它们的对象放在两个不同的层上,并以它们不会相互碰撞的方式进行配置。无论如何你都需要这样做,否则你的触摸传感器对撞机将与游戏世界互动。
您可以在此处了解更多信息:https://docs.unity3d.com/Manual/LayerBasedCollision.html

虽然它确实默认触发OnCollisionStay每一帧,但您可以使用图层碰撞矩阵来禁用此行为对于选定的图层。

即使您不这样做,性能差异也将是 可以忽略不计的 ,除非我们谈论的是数千个对象和真正未优化的 OnCollisionStay 函数。

您可以在 Physics 设置下找到 Layer Collision Mask 设置。
(Link: https://docs.unity3d.com/Manual/class-PhysicsManager.html)


另一种方法是只禁用两个碰撞器的碰撞,如下所示:

void Awake() {
    Collider col = GetComponent<Collider>();
    Collider parentCol = transform.parent.GetComponent<Collider>();
    Physics.IgnoreCollision(col, parentCol, true);
}

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


对于非量产的对象,我一般都懒得用上面的任何一种方法来禁用碰撞,而是使用这种逻辑:

void OnCollisionStay(Collision col) {
    // Skip if it's the object we don't care about
    if (col.gameObject == transform.parent.gameObject) { return; }

    // Could also check by layer
    if (col.gameObject.layer == 8) { return; }

    // Rest of the OnCollisionStay function
}