スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[ --年--月--日 --:--:-- : スポンサー広告 ]

【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 ]

カレンダー

プルダウン 降順 昇順 年別

11月 | 2018年12月 | 01月
- - - - - - 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 - - - - -


全記事表示リンク

全ての記事を表示する

検索フォーム

リンク

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。