Developer

【初心者Unity】レイヤー同士の衝突判定を設定する
2021.08.31
Lv1

【初心者Unity】レイヤー同士の衝突判定を設定する

レイヤー同士の衝突判定を設定する


Colliderによる衝突判定では、レイヤー間での衝突判定の有無を設定することができます。
ゲームオブジェクトは必ずなんらかのレイヤーに属しており、Inspectorの上部で表示、切り替えが可能です。(オレンジ線)

参考:【初心者Unity】レイヤーの設定方法

プレイヤーが歩き回れるゲームでは、プレイヤーの衝突判定をOFFにすると床や壁をすり抜けてしまうため、常に衝突を有効にしておく必要があります。しかし、プレイヤー同士はすれ違えるようにしたい。とか、プレイヤーに対して衝突判定を持つオブジェクトを重ねて配置したい。などの実装では、衝突判定が有効なオブジェクト同士の接触のため、互いに衝突したり、めり込んで反発などの挙動が起こってしまいます。これらの課題を簡単に解決できる手段として、レイヤー間での衝突有無の選択が非常に有用です。

衝突するオブジェクト同士を重ねた場合の例


互いに衝突しうるゲームオブジェクト同士を意図的に重ねた場合の挙動です。

/ Collider同士が反発してしまい、予期せぬ挙動となります。 \

もちろんこれは特殊なケースですが、移動可能なオブジェクトでは起こり得ます。

設定はPhysics Managerから行う


レイヤー間での衝突判定の設定は、Physics Managerから行います。
メニューバーから、Edit → Project Settings と選択すると、Physics Managerが表示されます。
ウィンドウの一番下にある項目、Layer Collision Matrix を使用してレイヤーごとの衝突判定の有無を設定します。

Layer Collision Matrix


レイヤー同士の衝突有無のマトリックス表です。
交差する位置のチェックを外すと、そのレイヤー同士で衝突が発生しなくなります。

例えば次の2つのゲームオブジェクトが衝突しないようにするのであれば、それぞれ「Default」レイヤーと「My Layer1」レイヤーなので、

マトリックスは「Default」と「My Layer1」が交差する部分のチェックを外します。

これで「Default」レイヤーと「My Layer1」レイヤーに属するオブジェクト同士は衝突しなくなります。

Unity実践編 - 目次リンク

実践Unityゲームプログラミング 連載目次