はじめに
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って便利ですよね
コメント