本日はUniRxの小ネタ枠です。
UniRxのSwitchを使ってObservableを切り替える方法を記事にします。
前提条件
UniRxの環境構築手順は以下の記事を参照ください。
bluebirdofoz.hatenablog.com
Switchを使ってObservableを切り替える
Switchオペレータを使うと既にObservableを購読していた場合、以前のObservableを破棄して新しいObservableを購読します。
結果としてObservableを切り替える動作が可能になります。
以下のサンプルスクリプトを作成しました。
ボタンを押下すると1秒ごとに発火するObservableを生成し、ボタン押下からの秒数を表示します。
・SwitchTest.cs
using UniRx; using UnityEngine; using UnityEngine.UI; public class SwitchTest : MonoBehaviour { [SerializeField] private Button countStartButton; void Start() { // ボタンを押下すると1秒毎に経過秒数をログ出力する countStartButton.OnClickAsObservable() // ボタン押下時に発火するObservable .Select(_ => Observable.Interval(System.TimeSpan.FromSeconds(1))) // 1秒毎にOnNextするObservableに変換 .Switch() // 購読するObservableを切り替える .Subscribe(count => Debug.Log($"{count}秒経過")) // 経過秒数をログ出力する .AddTo(this); } }
シーンに設定してボタンを押下すると以下の通り、ボタン押下からの経過病が表示されます。
Switchオペレータを挟んでいるため、2回ボタンを押した場合は1回目のObservable.Intervalの購読が破棄されます。
これにより、1回目のボタン押下のカウントは発生しなくなります。