首页 > 解决方案 > Box collider里面的Box collider会影响游戏性能吗?

问题描述

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

在此处输入图像描述

标签: c#unity3dgame-development

解决方案


虽然默认情况下它会触发OnCollisionStay每一帧,但您可以使用图层碰撞矩阵来禁用所选图层的此行为。

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

您可以在 Physics 设置下找到 Layer Collision Mask 设置。
(链接: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
}

推荐阅读