Unity RuntimeInitializeOnLoadMethod

2024/03/17に公開

共通の初期化処理

概要

  • 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;
    }
}

導入方法

  1. 新規Scene "RuntimeInit"作成
  2. RuntimeInit.csを作成
  3. File -> BuildSettings -> ScenesInBuild -> Scene "RuntimeInit" 追加する
  4. ScenesInBuildにおいて Scene "RuntimeInit" が一番下になるよう順番を設定する

実行の順番

構成例

  • Scene "MainStage"
  • Scene "BackStage" ※RuntimeInitializeOnLoadMethodの入った RuntimeInit.cs が入っている

Scene "MainStage"を起動Sceneに設定して実行した挙動

  1. RuntimeInit.cs の RuntimeInitializeOnLoadMethodの処理が実行される
  2. Scene "MainStage" が起動する
  3. Scene "MainStage" のAwake
  4. Scene "BackStage" のオブジェクトAwake
  5. Scene "MainStage" のOnEnable
  6. Scene "BackStage" のOnEnable
  7. Scene "MainStage" のStart

Discussion