EventSystem.current.IsPointerOverGameObject()
を使うと、nGUI上のオブジェクトをいじってるときにはクリックを無視できる。
タップに反応しない例
if (Input.GetMouseButtonDown (0)) {
if (EventSystem.current.IsPointerOverGameObject()) {
// nGUI上をクリックしているので処理をキャンセルする。
return;
}
}
ところが、実機(iPhone)では処理がスキップされなくて困った。
ぐぐってみたところ、以下の記事を発見。
[Unity]uGUIが被ってる場合はオブジェクトタップの処理を止めたい
どうやら、IsPointerOverGameObject()
はそのままではマウスクリックしかチェックしないらしい。
タップをチェックするには、引数にInput.GetTouch(0).fingerId
を渡せば良いようだ。
タップに反応する例
if (Input.GetMouseButtonDown (0)) {
if (EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId)) {
// nGUI上をクリックしているので処理をキャンセルする。
return;
}
}
上記のように修正したところ、うまく動いた。
【追記:2022年8月23日】
EventSystem.current.currentSelectedGameObjectのヌルチェックをする方法もあるようだ。
(iPhoneでの動作は未確認)
if (EventSystem.current.currentSelectedGameObject != null) {
return;
}