時代に翻弄されるエンジニアのブログ

ゲームプログラマをやっています。仕事やゲームや趣味に関してつらつら書きたいと思います。

2D UI がタップされたかを知りたい

f:id:tkymx83:20200105222959p:plain

こんにちは、いつも検索することをブログにしようプロジェクト

今日は、Unity の 2D UI をタップしているかを知る方法について記事化します。

どんなときに使うの?

ゲームにおいて、タップとは以下の2つの意味合いがあります。

  • 3D 空間のオブジェクトをタップする
  • 2D UI のオブジェクトをタップする

ここで問題があります。 3Dオブジェクト上に2D UI がある場合、どちらをタップしているかわからないという問題です。

このようなときに対処法がいくつかあると思いますが、よく使われる方法は、2D UI をタップしていなかったら、3D オブジェクトのタップ判定を行うという方法です。

このときに、「2D UI をタップしているか?」を知りたくなります。

2D UI のタップを取得する方法。

if(EventSystem.current.currentSelectedGameObject != null) {
    // 2D UI をタップ
}

以上です。

簡単に説明すると、currentSelectedGameObject には、現在タップされているオブジェクトの GameObject が格納されています。

そのため、格納されているものが無いということは、2D UI 上をタップしていないということになります。

注意

タップを検知する方法は色々あります。他サイトでは以下のように紹介されている場合もあります。

if (EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId)) {
    // 2D UI をタップ
}

こちら、実機では正常に動作しません。fingerId が 常に -1 を帰す場合があるようで、エディターでは正常に動作するように見えても、実際実機で見てみたら、動作をしなかったということもあるようです。

終わりに

EventSystem やマルチタップ周りの知識があやふやなので、Update したい。。。