MRが楽しい

MRやVRについて学習したことを書き残す

UnityでOnApplicationQuitを使ってアプリケーション終了時の処理を行う

本日は Unity の小ネタ枠です。
Unity で OnApplicationQuit を使ってアプリケーション終了時の処理を行う方法についてです。

OnApplicationQuit

アプリケーションが終了する直前に、全てのゲームオブジェクトで実行されます。
UnityEditor 上ではプレイモードを停止したときに本メッセージが呼び出されます。
docs.unity3d.com

プラットフォームによっては本メッセージが呼ばれないことがある点に注意が必要です。
例えば、iOS アプリケーションではサスペンドされるため終了しません。
プレイヤー設定で[Exit On Suspend]プロパティを有効化してサスペンドせず終了させる必要があります。
Windows Store Apps および Windows Phone 8.1 ではアプリケーションの終了イベントがありません。
WebGL ではブラウザのタブが閉じる方法のため、OnApplicationQuit を実装することができません。

アプリケーション終了時には OnApplicationQuit -> OnDisable -> OnDestroy の順でライフサイクル関数が呼び出されます。
このため、OnApplicationQuit はインスタンスを破棄する前に処理を行うことができます。
docs.unity3d.com

サンプルコード

アプリケーション終了時のライフサイクル関数の呼び出し順を確認する以下のサンプルコードを用意しました。
・OnApplicationQuitTest.cs

using UnityEngine;

public class OnApplicationQuitTest : MonoBehaviour
{
    private void OnApplicationQuit()
    {
        Debug.Log("Check OnApplicationQuit");
    }

    private void OnDisable()
    {
        Debug.Log("Check OnDisable");
    }

    private void OnDestroy()
    {
        Debug.Log("Check OnDestroy");
    }
}

UnityEditor 上で OnApplicationQuit の動作を確認する場合は、プレイモードを停止します。

以下の通り、OnApplicationQuit -> OnDisable -> OnDestroy の順で呼び出されることが分かります。