プレイボタンをポチっと押してから、実際にプレイ開始されるまでの間に呼ばれるコールバックの呼び出し順を調べてみたのでその覚書。
今回調べたもの
UnityEditor
- InitializeOnLoadAttribute
- InitializeOnLoadMethodAttribute
- EditorApplication.playModeStateChanged (Unity2017.2以降)
- EditorApplication.playmodeStateChanged (Unity2017.1以前)
- DidReloadScripts
- InitializeOnEnterPlayModeAttribute (Unity 2019.3以降)
UnityEngine
- RuntimeInitializeOnLoadMethodAttribute
- RuntimeInitializeLoadType
- AfterAssembliesLoaded (Unity2019.1以降)
- BeforeSplashScreen (Unity2019.1以降)
- SubsystemRegistration (Unity2019.2以降)
- RuntimeInitializeLoadType
- ISerializationCallbackReceiver
スクリプト
スクリプトはこちら
これを適当なGameObjectに張り付けて、プレイボタンをポチっとすればConsoleにログが表示されます。
Unity2020.1.2f1で確認
試しにUnity2020.1.2f1で確認してみたところ以下のようになりました。
※ Enter Play Mode Settingsはオフ(全てリロードされる状態)
※「PlayStart」、「 Play : 時間」と出るログは別物のログ。
※「Error detecting ~」はVS周りのエラーログ(?)
個人的にOnAfterDeserialize()が呼び出されるタイミングが意外ですね。
- プレイボタン押した直後からInitializeOnEnterModeの間に古いインスタンスのOnAfterDeserializeが呼ばれている点
- DidReloadScripts直後に呼ばれておりBeforeSceneLoad~AfterSceneLoadの間ではない点
この辺りは気を付けたほうが良さそうです。
Unityのアセット販売中!
ステートマシンの状態遷移やパラメータはエディタで編集でき、
ゲームロジックに依存するステートの挙動はスクリプトで記述可能なエディタ拡張。
RPGツクールVXやWOLF RPGエディターのオートタイルに準拠したエディタ拡張。