今回は、
UnityEngine.EventSystems
にあるIPointerDownHandler
だったりIPointerUpHandler
の実装クラス作って、
作ったスクリプトを適当なゲームオブジェクトにアタッチしたのにイベントが取れない!(タッチが反応してくれない!)
…ということがあったのでそれについてです。
この記事での環境
* Unity 2018.1.0f2 Personal(64bit)
前提(おさらい)
UnityEngine.EventSystems
にあるIPointerDownHandler
だったりIPointerUpHandler
を実装することで
uGUIのImage
やButton
がタッチされたタイミングをとることができます。
public class PoyoPoyo : MonoBehaviour, IPointerDownHandler, IPointerUpHandler { public void OnPointerDown(PointerEventData eventData){ //画面にタッチしたときの処理 } public void OnPointerUp(PointerEventData eventData) { //画面から手を離したときの処理 } }
マウスクリックとタッチを同じように扱ってくれるので、エディタ上ですぐ確認できて楽ちんです!
Routationしてたらタッチイベントが取れなかった
上記のような画像を組み合わせてコントローラーの十字キー風?に設置していたのですが、
その際に、上方向以外の方向の画像をタッチしてもイベントが取れませんでした。
上方向の画像以外はRectTransform#Rotation
をいじって回転させている状態です。
対処法
RectTransform#Rotation
を変更していない親のゲームオブジェクトでラップすることで回避できます。
親のゲームオブジェクトに先ほど作ったIPointerDownHandler
を実装したスクリプトをアタッチします。
親のゲームオブジェクトのRectTransform#Rotation
は変更しません。
注意が必要なのは、親のゲームオブジェクトにImage
等のタッチに反応するコンポーネントを配置しないといけないことです。
ここではImage
コンポーネントのカラーを透明にして親がもつImage
は見えない(けど存在する)ようにしています。
回転させたい画像を持つゲームオブジェクトを作った親ゲームオブジェクトの子にします。
これでタッチイベントが取れるようになりました!