MRが楽しい

MRやVRについて学習したことを書き残す

Unityでレイヤーマスク毎に衝突するレイヤーを指定する

本日は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つのオブジェクトをすり抜けて一番下まで落下しました。