using UnityEditor; using UnityEngine; using UnityEngine.SceneManagement; [InitializeOnLoad] public class EditPlay : MonoBehaviour { static string sceneName; static EditPlay() { // 从 EditorPrefs 读取存储的选项,如果不存在则设置默认值为 "Entry" sceneName = EditorPrefs.GetString("EditPlay_SceneName", "Entry"); // 使用 delayCall 来在编辑器启动后刷新菜单项状态 EditorApplication.delayCall += () => { RefreshMenuChecked(); Debug.Log("编辑器启动时已刷新菜单项状态"); }; // 自动加载场景(仅在编辑器进入播放模式时有效) EditorApplication.playModeStateChanged += OnPlayModeStateChanged; } private static void OnPlayModeStateChanged(PlayModeStateChange state) { if (state == PlayModeStateChange.EnteredPlayMode) { // 在进入播放模式时加载指定场景 if (sceneName == "Entry" && SceneManager.GetActiveScene().name != "Entry") { Debug.Log("加载 Entry 场景"); SceneManager.LoadScene("Entry"); } else if (sceneName == "Current") { Debug.Log("保持当前场景"); } } } [MenuItem("播放场景/当前场景")] static void playCurrentScene() { Debug.Log("切换成 Current 场景!"); sceneName = "Current"; EditorPrefs.SetString("EditPlay_SceneName", sceneName); RefreshMenuChecked(); } [MenuItem("播放场景/Entry场景")] static void playEntryScene() { Debug.Log("切换成 Entry 场景!"); sceneName = "Entry"; EditorPrefs.SetString("EditPlay_SceneName", sceneName); RefreshMenuChecked(); } static void RefreshMenuChecked() { Menu.SetChecked("播放场景/当前场景", sceneName == "Current"); Menu.SetChecked("播放场景/Entry场景", sceneName == "Entry"); } }