✨
Unity RuntimeInitializeOnLoadMethod
共通の初期化処理
概要
- MonoBehaviourを継承する必要はない
- UnityのAPIを呼び出せる
RuntimeInit.cs
using UnityEngine;
using UnityEngine.SceneManagement;
public class RuntimeInit
{
// OnEnableの後に実行される
[RuntimeInitializeOnLoadMethod]
static void OnLoadInit()
{
new GameObject ("commonTest");
}
// Awakeの前に実行される
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
static void BeforeSceneLoadInit()
{
/*
Startupシーン読み込む
LoadSceneの第二引数はLoadSceneMode.Additive(追加)で読み込む必要がある
この時点ではSceneは未生成なので参照はできない
*/
SceneManager.LoadScene("BackStage", LoadSceneMode.Additive);
// 60Fにする場合
Application.targetFrameRate = 60;
}
}
導入方法
- 新規Scene "RuntimeInit"作成
- RuntimeInit.csを作成
- File -> BuildSettings -> ScenesInBuild -> Scene "RuntimeInit" 追加する
- ScenesInBuildにおいて Scene "RuntimeInit" が一番下になるよう順番を設定する
実行の順番
構成例
- Scene "MainStage"
- Scene "BackStage" ※RuntimeInitializeOnLoadMethodの入った RuntimeInit.cs が入っている
Scene "MainStage"を起動Sceneに設定して実行した挙動
- RuntimeInit.cs の RuntimeInitializeOnLoadMethodの処理が実行される
- Scene "MainStage" が起動する
- Scene "MainStage" のAwake
- Scene "BackStage" のオブジェクトAwake
- Scene "MainStage" のOnEnable
- Scene "BackStage" のOnEnable
- Scene "MainStage" のStart
Discussion