更新日 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で実行時 | ビルドして実行時 |
---|---|
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
}
呼ばれる順序は以下の通りです。
順序 | 名前 |
---|---|
1 | SubsystemRegistration |
2 | AfterAssembliesLoaded |
3 | BeforeSplashScreen |
4 | BeforeSceneLoad |
5 | AfterSceneLoad |
テストコードと結果は以下の通りです。
[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");
初期化関数の実装方法と呼ばれる順序について紹介しました。
状況に応じて臨機応変に使い分けましょう。
関連ページ
こちらのページも合わせてご覧下さい。
【Unity】MonoBehaviourの初期化イベントについて考察します!2024/2/12
【Unity】ゲームオブジェクトを常駐化させるための方法を紹介します!2024/3/1
【Unity】シングルトンパターンを実装する方法を紹介します!2024/3/1
【Unity】スクリプトからテクスチャーなどのリソースを読み込む様々な方法を紹介します!2024/2/9
【Unity】ゲームビューのスクリーンショットを撮る方法を紹介します!2024/2/26