はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】UniRxを用いてアプリケーション終了時に何かしらの処理をする(OnApplicationQuitAsObservable)

はじめに

最近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.");
}

f:id:hanaaaaaachiru:20201006184943p:plain

基本的にMonoBehaviourを継承していればOnApplicationQuitあたりを使えば同様の効果を得られます。

ただライフサイクルが簡単に用いれない場合であっても,MainThreadDispatcher.OnApplicationQuitAsObservable()を使う事でメモリリークの回避などの後処理をすることができるはずです。

もう一息

MainThreadDispatcherクラスをみてみると,他にもライフサイクル関係のものがいくつかありました。

たとえばUpdateAsObservableLateUpdateAsObservableはもちろんのこと、OnApplicationFocusAsObservableOnApplicationPauseAsObservableもありました。

というか中身をみてみるとMainThreadDispatcherMonoBehaviorを継承していて,以下のような関係にあります。(当然といえば当然か)

MainThreadDispatcher MonoBehavior
UpdateAsObservable Update
LateUpdateAsObservable LateUpdate
OnApplicationFocusAsObservable OnApplicationFocus
OnApplicationPauseAsObservable OnApplicationPause
OnApplicationQuitAsObservable OnApplicationQuit

これらをうまく活用してみると色々と幅が広がるかもしれませんね。