Init
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
#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<SceneAsset>(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
|
||||
Reference in New Issue
Block a user