この記事の使用環境: Unity 2017.3.1f1 Personal (.NET 4.6 Equivalent), Visual Studio Community 2017, Windows10 ]


こちらの記事で Layer について書きましたが、その関連で。 

今回は、スクリプト内で LayerMask に対象の GameObject が含まれるかチェックしたいときに便利な拡張メソッドを紹介します。

拡張メソッド

この ↓ スクリプトをProjectビュー内の適当なところに置いておく。
using UnityEngine;

public static class LayerMaskExtensions
{
    public static bool Contains (this LayerMask layers, GameObject gameObject)
    {
        return 0 != (layers.value & 1 << gameObject.layer);
    }
}

使い方

こんな感じで、レイヤーマスクの拡張メソッドとして使います。引数にはゲームオブジェクトを指定します。
[SerializeField] LayerMask _layers;		// レイヤーマスクを指定する

private void Test()
{
if(_layers.Contains(nanikaGameObject)) // 拡張メソッドを使ってチェックする { // 含まれているときの処理 }
}

こんな感じで、インスペクターから指定するとラクチン。
png

参考資料

このチュートリアルの内部で使われています。

Unity公式のQ&Aにもほぼ同じものが紹介されていました。(これは引数にLayerを直接指定している)

今回は以上です。