using System; using System.Linq; using UnityEditor; using UnityEngine; namespace Stary.Evo.Editor { public class ChangePlayerSchema { public static PLayerMode PLayerMode { get => _pLayerMode; set => SetPlayerMode(value); } private static PLayerMode _pLayerMode; private const string EditorSimulateMode = "Evo/Schema/ChangePlayer/EditorSimulateMode(编辑器调试模式)"; private const string HostPlayMode = "Evo/Schema/ChangePlayer/HostPlayMode(联机运行模式)"; private const string LocalPlayMode = "Evo/Schema/ChangePlayer/LocalPlayMode(本地运行模式)"; private const string WebPlayMode = "Evo/Schema/ChangePlayer/WebPlayMode(Web运行模式)"; [MenuItem(EditorSimulateMode, false,3)] private static void SetEditorMode() => SetPlayerMode(PLayerMode.EDITOR_SIMULATEMODE); [MenuItem(HostPlayMode, false,3)] private static void SetHostMode() => SetPlayerMode(PLayerMode.HOST_PLAYMODE); [MenuItem(LocalPlayMode, false,3)] private static void SetLocalMode() => SetPlayerMode(PLayerMode.LOCAL_PLAYMODE); // [MenuItem(WebPlayMode)] // private static void SetWebMode() => SetPlayerMode(PLayerMode.WEB_PLAYMODE); [MenuItem(EditorSimulateMode, true,3)] private static bool ValidateModeMenu() { string platform = CustomEditorPrefs.GetString("ChangePlayerSchema"); Menu.SetChecked(EditorSimulateMode, platform == PLayerMode.EDITOR_SIMULATEMODE.ToString()); Menu.SetChecked(HostPlayMode, platform == PLayerMode.HOST_PLAYMODE.ToString()); Menu.SetChecked(LocalPlayMode, platform == PLayerMode.LOCAL_PLAYMODE.ToString()); //Menu.SetChecked(WebPlayMode, platform == PLayerMode.WEB_PLAYMODE.ToString()); Debug.LogError($"ChangePlayerSchema:{platform}"); return true; } public static void SetPlayerMode(PLayerMode mode) { // 清除所有旧模式定义 var currentTarget = EditorUserBuildSettings.selectedBuildTargetGroup; if (currentTarget == BuildTargetGroup.Unknown) return; var defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(currentTarget) .Split(';') .Where(d => !Enum.GetNames(typeof(PLayerMode)).Contains(d)) .ToList(); // 添加新模式 defines.Add(mode.ToString()); PlayerSettings.SetScriptingDefineSymbolsForGroup(currentTarget, string.Join(";", defines)); Debug.Log($"当前编译符号: {string.Join(";", defines)}"); // 添加调试日志 _pLayerMode = mode; CustomEditorPrefs.SetString("ChangePlayerSchema", _pLayerMode.ToString()); ValidateModeMenu(); AssetDatabase.Refresh(); // 添加解决方案文件重新生成逻辑 EditorApplication.delayCall += () => { //EditorApplication.ExecuteMenuItem("Assets/Open C# Project"); UnityEditor.Compilation.CompilationPipeline.RequestScriptCompilation(); Debug.Log("已强制重新生成解决方案文件"); }; } } public enum PLayerMode { //编辑仿真模式, EDITOR_SIMULATEMODE, //联机运行模式 HOST_PLAYMODE, //本地运行模式 LOCAL_PLAYMODE, // //web运行模式 // WEB_PLAYMODE } }