Unityでゲーム制作をしています。
今回はRaycast2Dを使ってUIのImageの判定を取ろうとした時に詰まった点をまとめておきます。
Colliderが割り当てられているか
UIのImageも2DColliderを当ててあげると、判定が取れます
RaycastTargetにチェックが入っているか
このチェックが入っていないと、Raycastが通り抜けてしまいます。
逆に考えれば接触させたくないUIがあるときは、このチェックを外してあげれば素通りします。便利ですね。
UIのほうが前にあるはずなのにその後ろのオブジェクトの判定を取っている
無知ゆえに激ハマりしました。
Game View上だと、UIのほうが前にあるように見えているのに、何度やってもその後ろのGameObjectに当たってしまうという状況に…。
そこで3Dビューにして初めて気がついたのですが、UIのほうが前にいると思っていたのは実は思い込みで、GameObjectのほうがよりカメラに近い状態になっていました。

UIの判定が画面の一部しか取れない
CanvasのRenderModeを「Screen Space」にしたらうまくいきました。
Overlay状態だと、Scene上のMainCameraの右上にしかUIがかかっていない状態になってしまっており、それがそのまま判定箇所となっていました
Overlay状態だと、例えば下記画像の緑の部分しか判定が取れません。

EventTrigerならScreen SpaceでもUIのImageの判定が取れたので、ただクリック判定が欲しいだけならEventTrigerも検討してみると良いかもしれないです。
【番外編】そもそもRaycast2Dを使っていない
アホみたいな見出しですが、実話なんですよね(ガチ)
Raycastは3D用と2D用が分かれています。2Dゲームを作っているのに3D用のRaycastを使っていると、当然ですが、判定が取れないですね
2D用のRaycastが使いたいときはもちろんColliderも2D用を使おう!
コメント