【Unity】 Physics.RayCastのLayerMaskはビット演算

小ネタ。よく間違えるのでメモ。

Layer名が「UI」のゲームオブジェクトにColliderを付けてタッチの当たり判定を取る場合。

レイヤーマスクを掛けると多分それ以外のレイヤーとの判定は行わないはずなので
処理負荷が軽くなる→じゃあ引数にレイヤーを・・・ とやるんだけど、
そのまんまレイヤー渡すとダメねっていう罠。

正解はビットシフトしたものを渡す(1 << LayerMask.NameToLayer("UI"))

コード例。

        Vector2 touch_pos = Input.mousePosition;

Ray ray = Camera.main.ScreenPointToRay( new Vector3(touch_pos.x, touch_pos.y, 0.0f) );
RaycastHit2D hit;

hit = Physics2D.Raycast(
ray.origin,
ray.direction,
10,
(1 << LayerMask.NameToLayer("UI"))
);

if( hit.collider != null )
{
// hit
// ...
}

テラシュールさんのこの記事がもっと詳しい。

[ 2014年01月12日 20:34:57 : Unity ]

カレンダー

プルダウン 降順 昇順 年別

06月 | 2020年07月 | 08月
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -


全記事表示リンク

全ての記事を表示する

検索フォーム

リンク