EditPlay.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using UnityEditor;
  2. using UnityEngine;
  3. using UnityEngine.SceneManagement;
  4. [InitializeOnLoad]
  5. public class EditPlay : MonoBehaviour
  6. {
  7. static string sceneName;
  8. static EditPlay()
  9. {
  10. // 从 EditorPrefs 读取存储的选项,如果不存在则设置默认值为 "Entry"
  11. sceneName = EditorPrefs.GetString("EditPlay_SceneName", "Entry");
  12. // 使用 delayCall 来在编辑器启动后刷新菜单项状态
  13. EditorApplication.delayCall += () =>
  14. {
  15. RefreshMenuChecked();
  16. Debug.Log("编辑器启动时已刷新菜单项状态");
  17. };
  18. // 自动加载场景(仅在编辑器进入播放模式时有效)
  19. EditorApplication.playModeStateChanged += OnPlayModeStateChanged;
  20. }
  21. private static void OnPlayModeStateChanged(PlayModeStateChange state)
  22. {
  23. if (state == PlayModeStateChange.EnteredPlayMode)
  24. {
  25. // 在进入播放模式时加载指定场景
  26. if (sceneName == "Entry" && SceneManager.GetActiveScene().name != "Entry")
  27. {
  28. Debug.Log("加载 Entry 场景");
  29. SceneManager.LoadScene("Entry");
  30. }
  31. else if (sceneName == "Current")
  32. {
  33. Debug.Log("保持当前场景");
  34. }
  35. }
  36. }
  37. [MenuItem("播放场景/当前场景")]
  38. static void playCurrentScene()
  39. {
  40. Debug.Log("切换成 Current 场景!");
  41. sceneName = "Current";
  42. EditorPrefs.SetString("EditPlay_SceneName", sceneName);
  43. RefreshMenuChecked();
  44. }
  45. [MenuItem("播放场景/Entry场景")]
  46. static void playEntryScene()
  47. {
  48. Debug.Log("切换成 Entry 场景!");
  49. sceneName = "Entry";
  50. EditorPrefs.SetString("EditPlay_SceneName", sceneName);
  51. RefreshMenuChecked();
  52. }
  53. static void RefreshMenuChecked()
  54. {
  55. Menu.SetChecked("播放场景/当前场景", sceneName == "Current");
  56. Menu.SetChecked("播放场景/Entry场景", sceneName == "Entry");
  57. }
  58. }