MRが楽しい

MRやVRについて学習したことを書き残す

Sliderなどの画面UIのタップ開始と終了を検出する

本日は Unity の小ネタ枠です。
Sliderなどの画面UIのタップ開始と終了を検出する方法を記事にします。

サンプルシーン

以下の Slider のUIを追加したサンプルシーンを作成しました。
f:id:bluebirdofoz:20220215234308j:plain

[Slider]のコンポーネントには値を取得するイベントを Inspector から設定できますが、タップの開始/終了のイベントは提供されていません。
f:id:bluebirdofoz:20220215234318j:plain

タップの開始/終了を検出するサンプルスクリプト

画面UIのタップの開始/終了を検出するには IPointerDownHandler/IPointerUpHandler を実装したスクリプトをUIオブジェクトに設定します。
以下の通りタップの開始/終了を検出し、登録した UnityEvent を実行するサンプルスクリプトを作成しました。
・PointerCheck.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;

public class PointerCheck : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
    /// <summary>
    /// タップ開始イベント
    /// </summary>
    public UnityEvent EventPointStart;

    /// <summary>
    /// タップ終了イベント
    /// </summary>
    public UnityEvent EventPointEnd;

    public void OnPointerDown(PointerEventData eventData)
    {
        EventPointStart.Invoke();
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        EventPointEnd.Invoke();
    }
}

また検出時の確認のため、以下のログ出力を行うサンプルスクリプトを合わせて作成しました。
・SiderLog.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SliderLog : MonoBehaviour
{
    public void MessageLog(string message)
    {
        Debug.Log("Message : " + message);
    }

    public void ValueLog(float value)
    {
        Debug.Log("Value : " + value);
    }
}

サンプルスクリプトを Slider オブジェクトに設定して Inspector から呼び出しイベントを登録します。
f:id:bluebirdofoz:20220215234330j:plain

動作確認

シーンを再生して動作を確認します。
f:id:bluebirdofoz:20220215234339j:plain

Slider をタップし始めたタイミングと終えたタイミングでログが出力されました。
f:id:bluebirdofoz:20220215234348j:plain