Unity:是否可以将触发碰撞器的场景配置为仅适用于一层?

Unity : is it possible to configure the scene for trigger colliders to only work with one layer?

Unity 已经很好地管理了碰撞和触发器,但我想知道我是否可以优化触发器以仅对层做出反应?

目前,如果我在一个场景中有许多不同的对象和碰撞器,我需要做的是:

void OnTriggerEnter (Collider other) {
    if (other.gameObject.layer == myLayer) {
        // do stuff here
    }
}

但这意味着用 ALL 的碰撞器 计算的碰撞似乎效率不高。

如果我想让触发器对玩家做出反应并且只对玩家做出反应,有没有办法告诉它忽略所有其他层以避免不必要的计算?

是的,使用手册中描述的碰撞矩阵 here

  • 添加一个新的图层蒙版(或只使用已有的图层蒙版)
  • 取消选中它可以碰撞的所有层,除了“玩家”层
  • 将游戏对象的图层更改为新修改的图层
  • 现在该对象只能与玩家碰撞,并且只能被玩家触发(前提是其中一个有刚体组件)