自分用Unityメモ:特定レイヤーがレイヤーマスクに含まれているか調べる
以下の簡単な拡張メソッドをどこかに用意しておきます。
(※ボクの場合は UnityExtension.cs というstaticなクラスを用意して、
簡単な拡張メソッドをまとめて置いています)
/// <summary> /// LayerMaskに指定のLayerが含まれているかを調べます /// </summary> /// <param name="layerMask"></param> /// <param name="layer"></param> /// <returns></returns> public static bool Contains(this LayerMask layerMask, int layer) { return layerMask == ( layerMask | (1 << layer) ); }
レイヤーマスクはビット演算を使用して作られているので
調べるレイヤーと「or演算」を行って、
元と比べて変化がなければそのレイヤーはマスクに含まれている、
という判定になります。
あとはこんな感じで使います。
pulic LayerMask mask; //マスク。中身はインスペクタから入力するなり、何か参照するなり pulic int layer = *; //調べるレイヤー if (mask.Contains(layer)) { Debug.Log("レイヤーが含まれているよ"); }
単にオブジェクトの種類で処理を分けたいときはtagなり、
コンポーネントの参照をするなりすればよいとは思うのですが、
どうしてもレイヤーで調べたいときに。
個人的には LayerMask がインスペクタから設定できる点が便利だと思います。
こう、プロジェクトごとにレイヤーの名前が微妙に違ってたりするので (