uGUIとSpriteや他のGameObjectが重なっている時、両方タッチに反応してしまうのは都合が悪い。 なので、uGUIのUIが重なっている時は、その他のタッチ処理を無効にして通らない様にします。 基本的には、EventSystem.current.IsPointerOverGameObject()を使えば良いです。
using UnityEngine.EventSystems; //------------------------------------------------------------- // EventSystemのGameObjectにマウスオーバーしているか? //------------------------------------------------------------- public bool IsPointerOverGameObject() { EventSystem current = EventSystem.current; if (current != null) { if (current.IsPointerOverGameObject()) { return true; } foreach (Touch t in Input.touches) { if (current.IsPointerOverGameObject(t.fingerId)) { return true; } } } return false; }
使い方はシンプルに
//------------------------------------------------------------- //! タッチしたか. //------------------------------------------------------------- public bool IsTouchPress() { if (Input.GetMouseButtonDown(0)) { if (!IsPointerOverGameObject()) { return true; } } return false; }
こんな感じでタッチ処理をラップしてIsTouchPressを使う様にしてあげれば良いです。