Unityのレイヤー機能を使用した衝突判定の回避
Unityのレイヤー機能を使用した衝突判定の回避
UnityのエディターやC#のちょいワザを紹介していきます。
今回は、Layer機能を使用した衝突判定の回避方法についてです。
[Unity_317×90]
コライダーがめり込むと予期せぬ動きをする
マルチ対戦ゲームなどにおいて、当たり判定を持ったプレイヤー同士はマップ上ですれ違えません。
また、基本的にオブジェクト同士は重なり合わないように配置することが一般的ですが、デフォルトの3Dオブジェクトではうまく接合できない角度がどうしても出てきてしまいます。このようなケースで、オブジェクトがRigidBodyをもっており、コライダーが有効になっていると、下図のように反発してしまいます。
Physics Manager で Layer ごとに衝突判定の有無を設定する
特定のオブジェクトにおけるコリジョン(衝突)の有無の設定は、Physics Managerから行います。
メニューバーから、Edit → Project Settings → Physics と選択し、インスペクターにPhysics Managerを開きます。
一番下にある項目、Layer Collision Matrix を使用してレイヤーごとの衝突定の有無を設定します。
Layer Collision Matrix
Layer同士の衝突判定の組み合わせ表です。
Layer名が交差する位置のチェックマークをOFFにすると、衝突が判定が行われなくなります。
レイヤーの変更および作成方法
Layerの変更は、ゲームオブジェクトのインスペクターから、Layerのプルダウンにて行います。
新規Layerを作成する場合は、Add Layerを選択します。
作成するだけでは切り替わらないので、変更を忘れないようにしましょう。
Layer Collision Matrix
最後にLayer Collision Matrix にて作成したLayerが交差する箇所のチェックを外しておきます。
以上の設定で、作成したLayerのオブジェクト同士は衝突判定が行われなくなりました。
▶
【Unity】3Dアクションゲームを作ろう!#7 ステージの作成(Skybox・落下判定)
▶
【Unity】3Dアクションゲームを作ろう!#8 ステージの作成(スイッチ・扉)
▶
【Unity】3Dアクションゲームを作ろう!#9 プレイヤーのHP管理
▶
【初心者Unity】JsonUtilityクラスでJSONを扱う方法
▶
【初心者Unity】スクリプトからコンポーネントを追加する方法
ゲーム制作関連のオススメ連載リンク
とっても手軽なゲーム制作体験!
Unityゲーム開発基礎
実際のリリースゲームを題材にしたハンズオンゲーム制作連載
実践unityゲーム開発