以下の内容はhttps://bluebirdofoz.hatenablog.com/entry/2024/06/29/235315より取得しました。


UniRxのCompositeDisposableを使ってまとめて購読を解除する

本日は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メソッドを実行すると、購読が全て解除されてログ出力が停止しました。




以上の内容はhttps://bluebirdofoz.hatenablog.com/entry/2024/06/29/235315より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14