コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】Unity の再生を止めた時に各イベントが呼び出される順番

順番

f:id:baba_s:20201126174339p:plain

  1. EditorApplication.playModeStateChanged の PlayModeStateChange.ExitingPlayMode
  2. MonoBehaviour.OnApplicationQuit
  3. Application.quitting
  4. MonoBehaviour.OnDestroy
  5. EditorApplication.playModeStateChanged の PlayModeStateChange.EnteredEditMode

検証用スクリプト

using UnityEngine;

public class Example : MonoBehaviour
{
    private void Awake()
    {
        Application.quitting += () => Debug.Log( "quitting" );
    }

    private void OnApplicationQuit()
    {
        Debug.Log( "OnApplicationQuit" );
    }

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

#if UNITY_EDITOR
    [RuntimeInitializeOnLoadMethod( RuntimeInitializeLoadType.BeforeSceneLoad )]
    private static void RuntimeInitializeOnLoadMethod()
    {
        UnityEditor.EditorApplication.playModeStateChanged += OnChanged;
    }

    private static void OnChanged( UnityEditor.PlayModeStateChange change )
    {
        if ( change == UnityEditor.PlayModeStateChange.ExitingPlayMode )
        {
            Debug.Log( "ExitingPlayMode" );
        }
        if ( change == UnityEditor.PlayModeStateChange.EnteredEditMode )
        {
            Debug.Log( "EnteredEditMode" );
        }
    }
#endif
}