本日はUnityの小ネタ枠です。
Unityでレイヤーマスク毎に衝突するレイヤーを指定する方法です。
LayerCollisionMatrix
Unityではレイヤーごとに衝突検出を行うことができます。
LayerCollisionMatrix設定ではどのレイヤーとレイヤーが衝突するかを個別に設定可能です。
docs.unity3d.com
本設定を変更するにはメニューから[Edit -> Project Settings]を開き、[Physics]タブを開きます。
[LayerCollisionMatrix]欄から行列形式で設定可能です。交差する箇所のチェックを外すと、そのレイヤー同士の衝突が起こらなくなります。
デフォルトでは全てのレイヤー同士が衝突する設定になっています。
サンプル
試しに3つの別レイヤーを設定したオブジェクトを配置したシーンを作成しました。
一番上に[Default]レイヤーのオブジェクトを配置し、シーンの再生と共に落下するよう設定を行いました。
全ての衝突を有効にした場合
[LayerCollisionMatrix]で全てのチェックを入れた状態で動作を確認します。
この状態では全てのレイヤー同士で衝突が発生します。
以下の通り、[Default]レイヤーのオブジェクトは一番上のオブジェクトと衝突して停止しました。
3つの別レイヤーとの衝突を無効にした場合
[LayerCollisionMatrix]で[Default]と3つの別レイヤーのチェックを外した状態で動作を確認します。
この状態では[Default]レイヤーと3つの別レイヤーとでは衝突が発生しません。
以下の通り、[Default]レイヤーのオブジェクトは3つのオブジェクトをすり抜けて一番下まで落下しました。