2 minutes
[Unity] RaycastのlayerMaskの扱い方について
お世話になっております。
しゃまとんです。
UnityにはRaycastという機能があり、例えばあるオブジェクトの正面にrayを発射して
別のオブジェクトが存在するかを取得することが出来ます。
開発でRaycastを使う必要があり、使い始めたのですが勘違いはハマりポイントらしき点があったので
メモしておきたいと思います。
Raycastの使い方はこちらのサイトで分かりやすく説明されています。
おそらく基本的に使うのはPhysics.Raycastということで、使っていたのですが衝突が判定されなかった
のですが、LayerMaskの使い方を勘違いしておりました。
public static bool Raycast(Vector3 origin, Vector3 direction, float maxDistance, int layerMask);
LayerMaskを使わなければ、Ignore RaycastにLayerを指定していないものをすべて検出されるのですが、
決められたものを検出したい場合はLayerMaskを使うと思います。
LayerMaskには文字通りMaskらしきものを設定しないといけません。
ということで、Layerの番号を取得して下記のようにしてやります。
// レイヤーの管理番号を取得
int layerNo = LayerMask.NameToLayer("レイヤーの名前");
// マスクへの変換(ビットシフト)
int layerMask = 1 << layerNo;
ちなみにLayerを見てみると31まであります。多分bit管理ですよね。
簡単に確認してみました。cubeからsphereにrayを射出して当たったら色を変えます。
最初、取得した番号をそのまま渡していたので検出がうまくいきませんでした。
これで検出できるようになりました。よかったよかった。
サンプルにつかったのはこちらです。
以上です。