【初心者Unity】レイヤー同士の衝突判定を設定する
▶
【Unity】3Dアクションゲームを作ろう!#7 ステージの作成(Skybox・落下判定)
▶
【Unity】3Dアクションゲームを作ろう!#8 ステージの作成(スイッチ・扉)
▶
【Unity】3Dアクションゲームを作ろう!#9 プレイヤーのHP管理
▶
【初心者Unity】JsonUtilityクラスでJSONを扱う方法
▶
【初心者Unity】スクリプトからコンポーネントを追加する方法
レイヤー同士の衝突判定を設定する
Colliderによる衝突判定では、レイヤー間での衝突判定の有無を設定することができます。
ゲームオブジェクトは必ずなんらかのレイヤーに属しており、Inspectorの上部で表示、切り替えが可能です。(オレンジ線)
プレイヤーが歩き回れるゲームでは、プレイヤーの衝突判定を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」レイヤーに属するオブジェクト同士は衝突しなくなります。