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/ChangePlayerSchema/EditorSimulateMode(编辑器调试模式)"; private const string OfflinePlayMode = "Evo/ChangePlayerSchema/OfflinePlayMode(本地运行模式)"; private const string HostPlayMode = "Evo/ChangePlayerSchema/HostPlayMode(服务器运行模式)"; private const string WebPlayMode = "Evo/ChangePlayerSchema/WebPlayMode(Web运行模式)"; [MenuItem(EditorSimulateMode)] private static void SetEditorMode() => SetPlayerMode(PLayerMode.EDITOR_SIMULATEMODE); [MenuItem(OfflinePlayMode)] private static void SetOfflineMode() => SetPlayerMode(PLayerMode.OFFLINE_PLAYMODE); [MenuItem(HostPlayMode)] private static void SetHostMode() => SetPlayerMode(PLayerMode.HOST_PLAYMODE); // [MenuItem(WebPlayMode)] // private static void SetWebMode() => SetPlayerMode(PLayerMode.WEB_PLAYMODE); [MenuItem(EditorSimulateMode, true)] private static bool ValidateModeMenu() { string platform = EditorPrefs.GetString("ChangePlayerSchema"); Menu.SetChecked(EditorSimulateMode, platform == PLayerMode.EDITOR_SIMULATEMODE.ToString()); Menu.SetChecked(OfflinePlayMode, platform == PLayerMode.OFFLINE_PLAYMODE.ToString()); Menu.SetChecked(HostPlayMode, platform == PLayerMode.HOST_PLAYMODE.ToString()); //Menu.SetChecked(WebPlayMode, platform == PLayerMode.WEB_PLAYMODE.ToString()); Debug.LogError("CheckPlatform"); 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; EditorPrefs.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, //单机运行模式 OFFLINE_PLAYMODE, //联机运行模式 HOST_PLAYMODE, // //web运行模式 // WEB_PLAYMODE } }