4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Unity]EventSystem.current.IsPointerOverGameObject()でタッチ処理をスキップする覚書

Last updated at Posted at 2017-08-14

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;
    }

参考: https://gomafrontier.com/unity/4049

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?