🚀

Unityどのシーンから起動しても共通の初期化 SceneInBuild

2024/03/20に公開

[RuntimeInitializeOnLoadMethod]を使う
GameObjectにアタッチ不要
"InitializeScene"を作っておく
ゲームを再生すると、カレントシーンにInitializeSceneを追加ロードします。どのシーンから起動してもInitializeSceneは必ず追加ロードされる。
デバッグ用のマネージャクラスなど、どのシーンから起動しても処理したいものはInitializeScene に置いて運用する

Initialize.cs
using UnityEngine;
using UnityEngine.SceneManagement;

public class Initialize
{
    private const string InitializeSceneName = "InitializeScene";
    
    [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
    public static void RuntimeInitializeApplication()
    {
        Debug.Log("RuntimeInitializeApplication");
        
        if (!SceneManager.GetSceneByName(InitializeSceneName).IsValid())
        {
            SceneManager.LoadScene(InitializeSceneName, LoadSceneMode.Additive);
        }
    }
}

InitializeSceneは、SceneInBuildの最後に配置しておく必要がある

処理の流れ
現在のシーンのオブジェクトが先に処理される
AwakeやStartに書く処理がInitializeSceneのオブジェクトに依存しないように

1.RuntimeInitializeApplicationが呼び出される
2.現在のシーンのオブジェクトのAwakeが呼び出される
3.InitlizeシーンのオブジェクトのAwakeが呼び出される
4.現在のシーンのオブジェクトのStartが呼び出される
5.InitlizeシーンのオブジェクトのStartが呼び出される

例えば、Start時にBGMを再生したい場合は4でコルーチンを起動し、WaitForEndOfFrameしてからSimpleSoundManager.Instanceでアクセスして処理する
2の時点ではSimpleSoundManagerは存在しないので、参照してはいけません

https://noracle.jp/unity-initialize-scene/

Splash Screenの設定を変えたらセーフエリアが取得できなくなった

https://noracle.jp/unity-splash-screen-safearea-issue/

シーンランチャー

SceneLauncher.cs
using UnityEditor;
using UnityEditor.SceneManagement;

public static class SceneLauncher
{
	[MenuItem("Launcher/GameScene", priority = 0)]
	public static void OpenGameScene()
	{
		EditorSceneManager.OpenScene("Assets/Scenes/GameScene.unity", OpenSceneMode.Single);
	}

	[MenuItem("Launcher/SampleScene", priority = 0)]
	public static void OpenSampleScene()
	{
		EditorSceneManager.OpenScene("Assets/Scenes/SampleScene.unity", OpenSceneMode.Single);
	}

	[MenuItem("Launcher/TitleScene", priority = 0)]
	public static void OpenTitleScene()
	{
		EditorSceneManager.OpenScene("Assets/Scenes/TitleScene.unity", OpenSceneMode.Single);
	}
}

https://noracle.jp/unity-shortcut-manager-tips/

シーンアンロード

https://bluebirdofoz.hatenablog.com/entry/2023/11/30/233608

シーンの一覧

https://bluebirdofoz.hatenablog.com/entry/2023/11/29/233803


Discussion