Unity (2022.1.23f1)
はじめに
GameObjectはレイヤーという情報を持っています。
衝突したオブジェクトのレイヤー値を取得するという方法を解説します。
衝突したGameObjectのレイヤーを取得
private void OnCollisionEnter(Collision collision) { int layer = collision.gameObject.layer; }
RIgidbody
をつけてるGameObjectは衝突するとOnCollisionEnter
が呼ばれます。
※相手がIsTrigger(トリガー)
ならOnTriggerEnter
が呼ばれます。
collision.gameObject.layer
で対象のレイヤーが取得できます。
これで判定したいレイヤーが取得できましたね。
layerを数値で判定する
取得したレイヤー値はint型になっています。
じゃあレイヤー値はどこで見るかですがインペクターで確認できます。
Layerのプルダウンを開くとレイヤー名の左側に書かれている数値がレイヤーの数値となります。
例えば上図のHoge
だとレイヤー値が 8
ということになります。
もしHogeのレイヤーに衝突したかを判定するにはこんな感じで書きます。
int layer = collision.gameObject.layer; if (layer == 8) // Hogeに衝突した!! }
layerをレイヤー名(文字列)で判定する
前述は値で判定でしていましたがレイヤー名(文字列)で判定したい場合もあるでしょう。
そういったときは、
LayerMask.NameToLayer("レイヤー名")
でレイヤー値からレイヤー名を取得できます。
例えばHoge
というレイヤー名とするなら以下のように書き方になります。
if (layer == LayerMask.NameToLayer("Hoge")) { // Hogeに衝突した!! }
LayerMask.NameToLayer
は存在しないレイヤー名を指定すると-1が返ります