トップ > 【Unity】エディター起動時やゲーム起動時に呼ばれる初期化関数を実装する方法を紹介します!
更新日 2023/4/19

【Unity】エディター起動時やゲーム起動時に呼ばれる初期化関数を実装する方法を紹介します!

Unityエディター起動時やゲーム起動時に呼ばれる初期化関数を実装する方法を紹介します。


エディター全般の初期化関数

Unityエディター起動時やスクリプト更新時、エディターからの実行時に呼ばれる初期化関数の実装方法です。

InitializeOnLoad属性

エディター専用

InitializeOnLoad属性をクラスに付加してstaticコンストラクタを定義します。

[InitializeOnLoad]
class InitializeClass
{
static InitializeClass()
{
Debug.Log("InitializeOnLoad");
}
}

InitializeOnLoadMethod属性

エディター専用

InitializeOnLoad属性のメソッド版です。
staticメソッドにInitializeOnLoadMethod属性を付加します。

[InitializeOnLoadMethod]
static void Initialize()
{
Debug.Log("InitializeOnLoadMethod");
}

ゲーム実行時の初期化関数

ゲーム実行時に呼ばれる初期化関数を実装する方法です。

InitializeOnEnterPlayMode属性

エディター専用

InitializeOnEnterPlayMode属性をstaticメソッドに付加します。

[InitializeOnEnterPlayMode]
static void InitializePlayMode()
{
Debug.Log("InitializeOnEnterPlayMode");
}

RuntimeInitializeOnLoadMethod属性

RuntimeInitializeOnLoadMethod属性をstaticメソッドに付加します。
この属性はランタイム用ですのでこの属性を多く利用すると思います。

[RuntimeInitializeOnLoadMethod]
static void RuntimeInitialize()
{
Debug.Log("RuntimeInitializeOnLoadMethod");
}

InitializeOnEnterPlayMode属性とRuntimeInitializeOnLoadMethod属性

InitializeOnEnterPlayMode属性とRuntimeInitializeOnLoadMethod属性の実行時の比較です。

Unityで実行時ビルドして実行時
InitializeRuntimeOnEditor InitializeRuntimeOnApp

RuntimeInitializeOnLoadMethod属性の実行順序

RuntimeInitializeOnLoadMethod属性は引数にRuntimeInitializeLoadTypeを渡して呼び出すタイミングを指定できます。 指定しない場合はAfterSceneLoadになります。

public enum RuntimeInitializeLoadType
{
// After Scene is loaded.
AfterSceneLoad,
// Before Scene is loaded.
BeforeSceneLoad,
// Callback when all assemblies are loaded and preloaded assets are initialized.
AfterAssembliesLoaded,
// Immediately before the splash screen is shown.
BeforeSplashScreen,
// Callback used for registration of subsystems
SubsystemRegistration
}

呼ばれる順序は以下の通りです。

順序名前
1SubsystemRegistration
2AfterAssembliesLoaded
3BeforeSplashScreen
4BeforeSceneLoad
5AfterSceneLoad

テストコードと結果は以下の通りです。

[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
static void AfterSceneLoad() => Debug.Log("AfterSceneLoad");

[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
static void BeforeSceneLoad() => Debug.Log("BeforeSceneLoad");

[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterAssembliesLoaded)]
static void AfterAssembliesLoaded() => Debug.Log("AfterAssembliesLoaded");

[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSplashScreen)]
static void BeforeSplashScreen() => Debug.Log("BeforeSplashScreen");

[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
static void SubsystemRegistration() => Debug.Log("SubsystemRegistration");
RuntimeInitializeOnLoadMethod_Order

初期化関数の実装方法と呼ばれる順序について紹介しました。
状況に応じて臨機応変に使い分けましょう。


関連ページ


Copyright ©2022 - 2024 うにぉらぼ