UnityのLayerを攻略した
コード書いとる?
UnityのLayerMaskの苦手意識をなんとなく払拭したのでメモ書き。ここはnote
UnityのLayer
Tagとは別にGameObject同士を区別する仕組み。主にPhysicsで当たる/当たらないを制御する用途で用意されとるという認識。
これってビットマスクにして複数レイヤーを対象にして含む/含まないをまとめて判定できるのが便利なんですよねー。
主にRaycast判定で使います。
int layerMask = 1 << 8;
//プレイヤーレイヤーにあるオブジェクトとレイが交差するかどうか。
if(Physics.Raycast(transform.position、Vector3.forward、Mathf.Infinity、layerMask))
{
Debug.Log("The ray hit the player");
}
なんですがー!LayerMaskクラスのAPIをみてもちょっと使い方がわからなかったので自分なりに挙動を確認しつつまとめた!以下拙者的な使い方です。
// レイヤー番号からマスクを作る
var mask = 1 << gameObject.layer;
// レイヤー名からマスクを作る(複数可)
var mask = LayerMask.GetMask("Hoge", "Fuga");
// 指定レイヤーに含まれる?
if (((1 << gameObject.layer) & LayerMask.GetMask("Default", "Water")) != 0)
{
// DefaultかWaterレイヤー
}
// レイヤー番号を取得
var layer = LayerMask.NameToLayer("Piyo");
// 指定レイヤーと一致?
if (gameObject.layer == LayerMask.NameToLayer("Piyo"))
{
// Piyoレイヤーと一致
}
// インスペクターからレイヤーマスクを設定する場合
public LayerMask mask;
if (((1 << gameObject.layer) & mask.value) != 0)
{
// maskで設定したレイヤーに含まれる
}
レイヤー番号からマスクを作る関数が無いのがちょっと気になる… いや?どこかにあるのでしょうか?もし見かけたら教えてください!
ではまた次回!!
この記事が参加している募集
この記事が気に入ったらサポートをしてみませんか?