【UniTask】長押しとクリックで別の処理を実行する

ソースコード

LongPressEventTrigger
public class LongPressEventTrigger : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerClickHandler
{
    // 0.3秒以上押したままだと長押し
    private const int longPressMillisecound = 300;
    private bool pressing;
    private bool disableClick;
    public UnityEvent OnLongPress;
    public UnityEvent OnClick;

    public async void OnPointerDown(PointerEventData eventData)
    {
        var token = this.GetCancellationTokenOnDestroy();
        pressing = true;
        disableClick = false;
        var result = await UniTask.WhenAny(
            UniTask.Delay(longPressMillisecound, cancellationToken: token),
            UniTask.WaitWhile(() => pressing, cancellationToken: token));
        if (result == 0)
        {
            pressing = false;
            disableClick = true;
            OnLongPress.Invoke();
        }
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        pressing = false;
    }

    public void OnPointerClick(PointerEventData eventData)
    {
        if (!disableClick)
        {
            OnClick.Invoke();
        }
    }
}

OnPointerDownの中で”if (result == 1) OnClick.Invoke();”のようにしてしまうとスクロール動作時に反応してしまうのでOnPointerClickを使用しています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です