MRが楽しい

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

UniRxのThrottleを使って一定時間UIへの入力が無かった場合に処理を行う

本日は UniRx の小ネタ枠です。
UniRx の Throttle を使って一定時間UIへの入力が無かった場合に処理を行う方法を記事にします。

UniRxのThrottleを使って一定時間UIへの入力が無かった場合に処理を行う

UniRx の Throttle オペレータは指定の時間の間に複数のメッセージが通知された場合はそれを無視します。
指定の時間メッセージが通知されなかった場合、最後に受け取っていたメッセージのみを流します。

これを利用して例えば Button 押下の通知を受け取り、その入力から一定時間次の入力がない場合のみ押下イベントを発生させることができます。

以下、サンプルスクリプトです。
ボタンのクリックイベントを受け取り、一定時間が続けてのクリックが発生しなかったタイミングでログの出力処理が実行されます。
・ThrottleTest.cs

using System;
using UniRx;
using UnityEngine;
using UnityEngine.UI;

public class ThrottleTest : MonoBehaviour
{
    [SerializeField]
    private Button firstButton;

    void Start()
    {
        firstButton.OnClickAsObservable() // ボタンのクリックイベントをObservableに変換して監視する
            .Throttle(TimeSpan.FromSeconds(3.0f)) // 3秒以内に複数回発生するクリックは無視する
            .Subscribe(_ =>
            {
                Debug.Log($"Button Action !!");
            })
            .AddTo(this);
    }
}