この記事でのバージョン
Unity 2022.2.8f1
はじめに
Unityではレイヤー(Layer)ごとに衝突するかどうかを設定出来ますが、
「同じ敵だけど例外的にこのオブジェクトだけ衝突させたくない」
「このオブジェクトとの衝突を一瞬だけなくしたい」
みたいに細かい仕様が多い場合にはレイヤーが増えて使い勝手がよくないです。
しかし、Unity2022.2からCollision Layer Overrideという
オブジェクトごとに特定のレイヤーと衝突するかの設定が出来る機能が追加されたので、
今回はその紹介記事です!
Collision Layer Override
設定は各ColliderのInspectorで行います。
includeLayersが衝突するレイヤーで、excludeLayersが衝突しないレイヤーです。
なお、レイヤーを変える時と同じ感じでプログラムから変更する事も可能です。
collider.includeLayers = LayerMask.GetMask("Default"); collider.excludeLayers = LayerMask.GetMask("UI");
ちなみに、2Dでも同様の機能がありますが、設定出来る要素が3Dよりも多い感じで、
Force Send Layersで力を与えるレイヤー、Force Receive Layersで力を受けるレイヤーが設定でき、
Contract Capture LayersやCallback Layersでフラグやコールバックが影響するレイヤーを設定出来ます。
なお、対応するフラグやコールバックは以下のページから確認出来ます。
参考