こんにちは、いつも検索することをブログにしようプロジェクト
今日は、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 したい。。。