2017年1月16日月曜日

Unityで画面全体でタッチ入力を受け取る

Unityでハマったとこのメモです。

概要


  • 画面のどこをタッチしても入力を受け取るようにしたい
  • uGUIの要素で隠れていると入力を受け取れないようにしたい


結論

下記のようにすればよい
  1. Canvasに、画面サイズのTextを作成して、文字列を空にする。
  2. 作成したTextに、EventTriggerコンポーネントを追加する。
こうすると、画面全体がタッチ可能にしつつ、かつ、他のuGUIの要素を重ねてタッチできなくすることも可能になります。

経緯

画面全体でタッチを検出したい時、下記のようにしてました。

  1. シーン上のGameObjectにスクリプトを追加
  2. Update内でInput.touchesからタッチを取得
これで、「画面をタッチすると攻撃する」ということを実現していました。

けど、これだと、例えば「メニューを表示しているときはタッチしても攻撃しない」ということを実現するのが若干面倒です。
Inputを直接使うと、画面に何が映っていようと関係なくタッチを検出してしまうためです。

そこで、「uGUIの要素は重なって隠れているとタッチできない」という仕組みを利用したいと考えたわけです。

で、調べたところ下記のページに行き当たり、「結論」の方法を知りました。

補足

上記ページにもありますが、画面全体にタッチ検出できるImageを引き延ばして、アルファ値を0にして透明にする。という方法はダメです。「透明な色で画面全体を描画する」という処理が動きますので、パフォーマンスに悪いです。

上記ページでは他の方法も紹介されていますが、Unityのバージョン依存だったり、訳すの大変だったりしたので、ここで紹介はしません。興味があれば読んでみてください。

0 件のコメント:

コメントを投稿