はじめに
最近OnApplicationQuitAsObservable
というメソッドを知ったのですが,ネットの記事でほとんど取り上げられていなかったので軽く書いておきたいと思います。
アプリケーション終了時に処理をする
using UnityEngine; using UniRx; public class UniRxTest : MonoBehaviour { void Start() { var vendingMachine = new VendingMachine(); vendingMachine.Activate(); MainThreadDispatcher.OnApplicationQuitAsObservable() .Subscribe(_ => vendingMachine.DeActivate()); } } public class VendingMachine { public void Activate() => Debug.Log("VendingMachine Activate."); public void DeActivate() => Debug.Log("Vending Machine deactivate."); }
基本的にMonoBehaviour
を継承していればOnApplicationQuit
あたりを使えば同様の効果を得られます。
ただライフサイクルが簡単に用いれない場合であっても,MainThreadDispatcher.OnApplicationQuitAsObservable()
を使う事でメモリリークの回避などの後処理をすることができるはずです。
もう一息
MainThreadDispatcher
クラスをみてみると,他にもライフサイクル関係のものがいくつかありました。
たとえばUpdateAsObservable
,LateUpdateAsObservable
はもちろんのこと、OnApplicationFocusAsObservable
,OnApplicationPauseAsObservable
もありました。
というか中身をみてみるとMainThreadDispatcher
がMonoBehavior
を継承していて,以下のような関係にあります。(当然といえば当然か)
MainThreadDispatcher | MonoBehavior |
---|---|
UpdateAsObservable | Update |
LateUpdateAsObservable | LateUpdate |
OnApplicationFocusAsObservable | OnApplicationFocus |
OnApplicationPauseAsObservable | OnApplicationPause |
OnApplicationQuitAsObservable | OnApplicationQuit |
これらをうまく活用してみると色々と幅が広がるかもしれませんね。