| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- 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");
- }
- }
|