#if UNITY_EDITOR using UnityEditor; using UnityEditor.SceneManagement; using UnityEngine; [InitializeOnLoad] public static class SceneBootstrapLoader { private const string EnabledKey = "SceneBootstrapLoader.Enabled"; private const string BootstrapScenePathKey = "SceneBootstrapLoader.BootstrapScenePath"; private const string RequestedScenePathKey = "SceneBootstrapLoader.RequestedScenePath"; public static bool Enabled { get => EditorPrefs.GetBool(EnabledKey, false); set => EditorPrefs.SetBool(EnabledKey, value); } public static string BootstrapScenePath { get => EditorPrefs.GetString(BootstrapScenePathKey, string.Empty); set => EditorPrefs.SetString(BootstrapScenePathKey, value ?? string.Empty); } public static string RequestedScenePath { get => EditorPrefs.GetString(RequestedScenePathKey, string.Empty); set => EditorPrefs.SetString(RequestedScenePathKey, value ?? string.Empty); } static SceneBootstrapLoader() { EditorApplication.playModeStateChanged += OnPlayModeStateChanged; } private static void OnPlayModeStateChanged(PlayModeStateChange state) { if (!Enabled) { EditorSceneManager.playModeStartScene = null; return; } switch (state) { case PlayModeStateChange.ExitingEditMode: PreparePlayModeStartScene(); break; case PlayModeStateChange.EnteredEditMode: CleanupAfterPlayMode(); break; } } private static void PreparePlayModeStartScene() { string bootstrapPath = BootstrapScenePath; if (string.IsNullOrWhiteSpace(bootstrapPath)) { Debug.LogWarning("SceneBootstrapLoader: Bootstrap scene is not set."); EditorSceneManager.playModeStartScene = null; return; } var bootstrapScene = AssetDatabase.LoadAssetAtPath(bootstrapPath); if (bootstrapScene == null) { Debug.LogWarning($"SceneBootstrapLoader: Bootstrap scene not found at path: {bootstrapPath}"); EditorSceneManager.playModeStartScene = null; return; } string currentScenePath = UnityEngine.SceneManagement.SceneManager.GetActiveScene().path; RequestedScenePath = currentScenePath; EditorSceneManager.playModeStartScene = bootstrapScene; } private static void CleanupAfterPlayMode() { EditorSceneManager.playModeStartScene = null; } } #endif