【Unity】OnMouseDownでUIが被ってないかチェック


OnMouseDown / OnMouseUp / OnMouseDrag はオブジェクトがマウスクリックされても、画面タップされても呼び出されるとても使い勝手のいい関数。

ただしCanvasでポップアップなんかを出しているとボタンを押してもオブジェクトに伝播してしまう。

その対策メモ。

 

EventSystemを使って以下のように書ける。

これでUnityエディタでもAndroidでも期待通りに動く。

こんな感じで処理すれば良いと思う。

 

追記:ドラッグを伴う処理はマウスダウンありきだからコッチの方がいいかも。

 

さらに追記:これらのスクリプトでも偶に実機ですり抜ける。

調べてると色々試している記事を発見。

これ見て確かめてみると IsPointerOverGameObject が変だった。

この現象の対応策は見つからなかったけど、現状やりたいことに合わせてUIオブジェクトにSelectableコンポーネントを追加することにした。

これだと currentSelectedGameObject の判定に引っかかるので失敗しない。

実行順序によると思うけどコルーチンを使わないとSelectableが機能しない。


コメントを残す

メールアドレスが公開されることはありません。