うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】ScrollRect の子オブジェクトがドラッグ操作時に誤ったイベントが発生する問題

ScrollRectの子供に配置されたオブジェクトが、IPointerDownHandlerを持つとドラッグ操作時に誤って呼び出される問題があります。

例えば、以下のようなコンポーネントがScrollRectの子供オブジェクトに存在する場合、

public class EventHandleTest : MonoBehaviour, IPointerUpHandler
{
    public void OnPointerUp(PointerEventData eventData)
    {
        Debug.Log("OnPointerUp");
    }
}

クリックしてドラッグを開始すると、OnPointerUpが誤って呼び出されてしまいます。

しかし、IDragHandlerを実装した場合、正しくクリックを離したタイミングでOnPointerUpが呼び出されるようになります。

public class EventHandleTest : MonoBehaviour, IPointerUpHandler, IDragHandler
{
    public void OnPointerUp(PointerEventData eventData)
    {
        Debug.Log("OnPointerUp");
    }

    public void OnDrag(PointerEventData eventData)
    {
        Debug.Log("OnDrag");
    }
}

このように、IDragHandlerを実装することで、正確なイベントの発生タイミングを制御できます。