自分用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 がインスペクタから設定できる点が便利だと思います。
こう、プロジェクトごとにレイヤーの名前が微妙に違ってたりするので (
■
最近、進捗動画をあげていませんが
制作自体は順調です。
次のジャムまでにリリースするつもりで頑張ってます。
■
ちょっと色々考え中です。
うーむ、単位時間当たりの移動量を制御しておきたいな。
velocityを直接指定するだけでもある程度はokなんだけど...
Time.deltaTime * moveSpeed
単位時間、一秒あたりの移動量が moveSpeed になる。
今回はグリッドマップなので、moveSpeed=10なら、一秒で10マス移動する計算。簡単。
それはいいとして、直線の場合はこれでいいとして。
問題はこう、いつものホーミングレーザーみたいに軌道を変えながら動く場合なのだ...。