PR

[Unity]UniRxを使うとボタン連打防止が簡単に実現できる

Unity

はじめに

Unityを使ってゲーム作っている時にボタンが連打されて不具合が発生してしまうことがよくあります。

フラグ管理等で作れば実現できますが、UniRxを使えば簡単に実装できるで紹介します。

環境

  • Unity 2021.1.9f1

導入方法

UniRxの導入方法は以下の記事を見て下さい。

サンプルコード

ボタン連打を防止するには簡単でThrottleFirst()を利用するだけです。

ThrottleFirst()ボタン連打されたくない期間を設定するだけで実現できます。

下記のサンプルはボタンを押してから1秒間はボタンを押しても反応しません(OnClicked()が呼ばれません)

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UniRx;

public class SampleScene : MonoBehaviour
{
    [SerializeField] private Button button;

    void Start()
    {
        button?
            .OnClickAsObservable()
            .TakeUntilDestroy(this)
            .ThrottleFirst(TimeSpan.FromMilliseconds(1000))
            .Subscribe(_ =>
            {
                OnClicked();
            });
    }

    private void OnClicked()
    {
        Debug.Log("ボタンが押されたよ");
    }
}

結果

画面のボタンを連打していますが、ログが1秒間に1回しか表示されていないことがわかります。

さいごに

UniRxって便利ですよね

おすすめ参考書

コメント

タイトルとURLをコピーしました