本日はUniRxの小ネタ枠です。
UniRxのCompositeDisposableを使ってまとめて購読を解除する方法です。
前提条件
UniRxの環境構築手順は以下の記事を参照ください。
bluebirdofoz.hatenablog.com
CompositeDisposable
CompositeDisposableはUniRxで利用できるまとめてDisposeするためのクラスです。
購読時にAddToでCompositeDisposableを指定しておくことでこれを参照するObservableをまとめて解除することができます。
// CompositeDisposableを作成 CompositeDisposable compositeDisposable = new (); Observable.EveryUpdate() .Subscribe(_ => Debug.Log("EveryUpdate")) .AddTo(compositeDisposable); // AddToで指定する Observable.Interval(System.TimeSpan.FromSeconds(1)) .Subscribe(_ => Debug.Log("Interval")) .AddTo(compositeDisposable); // AddToで指定する // まとめてDisposeする compositeDisposable.Dispose();
サンプルスクリプト
Disposeメソッドを実行して全ての購読を解除する以下のサンプルスクリプトを作成しました。
・CompositeDisposableTest.cs
using UniRx; using UnityEngine; public class CompositeDisposableTest : MonoBehaviour { private CompositeDisposable _compositeDisposable = new (); void Start() { // Updateごとに処理を行う Observable.EveryUpdate() .Subscribe(_ => Debug.Log("EveryUpdate")) .AddTo(_compositeDisposable); // 1秒ごとに処理を行う Observable.Interval(System.TimeSpan.FromSeconds(1)) .Subscribe(_ => Debug.Log("Interval")) .AddTo(_compositeDisposable); } [ContextMenu("Dispose")] void Dispose() { // まとめてDisposeする _compositeDisposable.Dispose(); } }
スクリプトをシーンに配置して再生すると、ログ出力が定期的に出力されます。

Disposeメソッドを実行すると、購読が全て解除されてログ出力が停止しました。
