【Unity】UI と Sprite が重なっている時に UI として配置したボタンだけタップに反応させる

DEVELOP, Unity

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を使う様にしてあげれば良いです。

Posted by kazupon