【Unity】UI と Sprite が重なっている時に UI として配置したボタンだけタップに反応させる
uGUIのボタンにSpriteなど他の GameObject が重なっている時、UI と Sprite 両方の GameObject がタッチに反応してしまうのは都合が悪いので、 uGUIのUIオブジェクトが何かしら重なっている時は、その他のタッチ処理を無効にして通らない様にしてみます。 この対応には EventSystem.current.IsPointerOverGameObject() を使えば良いです。
目次
確認バージョン
Unity.5.6.0f3
サンプルコード
using UnityEngine.EventSystems;
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を使う様にしてあげれば良いです。