(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]


本ブログの運営者kan.kikuchiが個人で開発したゲームです!

    

ゲーム開始(起動)時に一度だけ初期化処理するクラス(エディタ上でも使える)【Unity】


このエントリーをはてなブックマークに追加


この記事でのバージョン
Unity 2022.2.2f1


はじめに

ゲームを作ってると最初に一度だけやっておきたい処理みたいなのが出てきます。

特にUnityだと「開発中にどのシーンから再生しても初期化したい」みたいになりがちです。

と言う事で今回は、ゲーム開始時に一度だけ初期化処理するクラスの紹介です!


ゲーム開始時に一度だけ初期化処理するクラス

さっそくですが、ゲーム開始時に一度だけ初期化処理するクラス、StartupInitializerのコードです。

using UnityEngine;

/// <summary>
/// ゲーム開始(起動)時に一度だけ初期化処理するクラス(エディタ上でも使える)
/// </summary>
public class StartupInitializer : MonoBehaviour {

  //初期化処理が完了したか
  public static bool IsInitialized { get; private set; } = false; 

  //=================================================================================
  //起動時
  //=================================================================================
	
  //ゲーム開始時(シーン読み込み前、Awake前)に実行される
  [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
  static void Initialize() {
    new GameObject("StartupInitializer", typeof(StartupInitializer));
  }
	
  //=================================================================================
  //初期化
  //=================================================================================

  private void Awake() {
    /*
     * 初期化処理
     */
		
    //初期化が済んだら自分を消す
    Destroy(gameObject);
    IsInitialized = true;
    }

}


このクラスMonoBehaviourを継承していますが、シーン上のオブジェクトにAddしておく必要はなく

RuntimeInitializeOnLoadMethod属性のおかげで自動的に生成されます。



後はAwakeに任意の初期化処理を実装するだけ。

また、他クラスでこの初期化前に処理をしたくない場合は、

IsInitializedがTrueになるのを待てば大丈夫です。