はじめに
最近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 |
これらをうまく活用してみると色々と幅が広がるかもしれませんね。