かさたな日記

主にUnityを使った制作記録。書いてる人は初心者です。一緒に頑張ろう。

自分用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 がインスペクタから設定できる点が便利だと思います。



こう、プロジェクトごとにレイヤーの名前が微妙に違ってたりするので (