Bläddra i källkod

进一步优化编译体验 (#550)

* 进一步优化编译体验

1.优化成按'F6'编译并热重载, 并能避免IDE编译后Unity再次编译;
2.将Ignore.asmdef放到Assets/Settings, Scripts目录下的Ignore.asmdef文件加入版本管理的忽略列表;
3.IDE不显示因Ignore.asmdef生成的项目;
4.简单整理了一下忽略列表文件, 有些文件看不懂就没有改动,看起来是历史遗留文件;
5.固定MenuItem按钮顺序;
6.打包完成弹出文件夹
EP-Toushirou 2 år sedan
förälder
incheckning
9a76b24e61
58 ändrade filer med 642 tillägg och 514 borttagningar
  1. 43 70
      .gitignore
  2. 7 7
      Book/1.1运行指南.md
  3. 73 77
      Unity/Assets/Scripts/Editor/Assembly/AssemblyEditor.cs
  4. 137 88
      Unity/Assets/Scripts/Editor/Assembly/AssemblyTool.cs
  5. 74 82
      Unity/Assets/Scripts/Editor/AssetPostProcessor/OnGenerateCSProjectProcessor.cs
  6. 21 13
      Unity/Assets/Scripts/Editor/BuildEditor/BuildEditor.cs
  7. 17 8
      Unity/Assets/Scripts/Editor/BuildEditor/BuildHelper.cs
  8. 12 16
      Unity/Assets/Scripts/Editor/GlobalConfigEditor/GlobalConfigEditor.cs
  9. 1 1
      Unity/Assets/Scripts/Editor/RecastNavDataExporter/NavMeshExporter.cs
  10. 9 10
      Unity/Assets/Scripts/Editor/ServerCommandLineEditor/ServerCommandLineEditor.cs
  11. 1 3
      Unity/Assets/Scripts/Editor/ToolEditor/ToolsEditor.cs
  12. 0 39
      Unity/Assets/Scripts/Editor/ToolbarExtension/CompileDllsToolbar.cs
  13. 0 11
      Unity/Assets/Scripts/Editor/ToolbarExtension/CompileDllsToolbar.cs.meta
  14. 1 2
      Unity/Assets/Scripts/HotfixView/Client/Demo/Opera/OperaComponentSystem.cs
  15. 0 16
      Unity/Assets/Scripts/HotfixView/Client/Ignore.asmdef.DISABLED
  16. 1 1
      Unity/Assets/Scripts/Model/Generate/Client/Ignore.asmdef.meta
  17. 0 16
      Unity/Assets/Scripts/Model/Generate/ClientServer/Ignore.asmdef.DISABLED
  18. 0 7
      Unity/Assets/Scripts/Model/Generate/ClientServer/Ignore.asmdef.DISABLED.meta
  19. 0 7
      Unity/Assets/Scripts/Model/Server/Ignore.asmdef.DISABLED.meta
  20. 0 16
      Unity/Assets/Scripts/ModelView/Client/Ignore.asmdef.DISABLED
  21. 0 7
      Unity/Assets/Scripts/ModelView/Client/Ignore.asmdef.DISABLED.meta
  22. 1 1
      Unity/Assets/Settings/IgnoreAsmdef.meta
  23. 8 0
      Unity/Assets/Settings/IgnoreAsmdef/Hotfix.meta
  24. 8 0
      Unity/Assets/Settings/IgnoreAsmdef/Hotfix/Client.meta
  25. 1 1
      Unity/Assets/Settings/IgnoreAsmdef/Hotfix/Client/Ignore.asmdef.DISABLED
  26. 1 1
      Unity/Assets/Settings/IgnoreAsmdef/Hotfix/Client/Ignore.asmdef.DISABLED.meta
  27. 8 0
      Unity/Assets/Settings/IgnoreAsmdef/Hotfix/Server.meta
  28. 1 1
      Unity/Assets/Settings/IgnoreAsmdef/Hotfix/Server/Ignore.asmdef.DISABLED
  29. 7 0
      Unity/Assets/Settings/IgnoreAsmdef/Hotfix/Server/Ignore.asmdef.DISABLED.meta
  30. 8 0
      Unity/Assets/Settings/IgnoreAsmdef/HotfixView.meta
  31. 8 0
      Unity/Assets/Settings/IgnoreAsmdef/HotfixView/Client.meta
  32. 1 1
      Unity/Assets/Settings/IgnoreAsmdef/HotfixView/Client/Ignore.asmdef.DISABLED
  33. 1 1
      Unity/Assets/Settings/IgnoreAsmdef/HotfixView/Client/Ignore.asmdef.DISABLED.meta
  34. 8 0
      Unity/Assets/Settings/IgnoreAsmdef/Model.meta
  35. 8 0
      Unity/Assets/Settings/IgnoreAsmdef/Model/Client.meta
  36. 1 1
      Unity/Assets/Settings/IgnoreAsmdef/Model/Client/Ignore.asmdef.DISABLED
  37. 1 1
      Unity/Assets/Settings/IgnoreAsmdef/Model/Client/Ignore.asmdef.DISABLED.meta
  38. 8 0
      Unity/Assets/Settings/IgnoreAsmdef/Model/Generate.meta
  39. 8 0
      Unity/Assets/Settings/IgnoreAsmdef/Model/Generate/Client.meta
  40. 16 0
      Unity/Assets/Settings/IgnoreAsmdef/Model/Generate/Client/Ignore.asmdef.DISABLED
  41. 1 1
      Unity/Assets/Settings/IgnoreAsmdef/Model/Generate/Client/Ignore.asmdef.DISABLED.meta
  42. 8 0
      Unity/Assets/Settings/IgnoreAsmdef/Model/Generate/ClientServer.meta
  43. 16 0
      Unity/Assets/Settings/IgnoreAsmdef/Model/Generate/ClientServer/Ignore.asmdef.DISABLED
  44. 7 0
      Unity/Assets/Settings/IgnoreAsmdef/Model/Generate/ClientServer/Ignore.asmdef.DISABLED.meta
  45. 8 0
      Unity/Assets/Settings/IgnoreAsmdef/Model/Generate/Server.meta
  46. 16 0
      Unity/Assets/Settings/IgnoreAsmdef/Model/Generate/Server/Ignore.asmdef.DISABLED
  47. 7 0
      Unity/Assets/Settings/IgnoreAsmdef/Model/Generate/Server/Ignore.asmdef.DISABLED.meta
  48. 8 0
      Unity/Assets/Settings/IgnoreAsmdef/Model/Server.meta
  49. 16 0
      Unity/Assets/Settings/IgnoreAsmdef/Model/Server/Ignore.asmdef.DISABLED
  50. 7 0
      Unity/Assets/Settings/IgnoreAsmdef/Model/Server/Ignore.asmdef.DISABLED.meta
  51. 8 0
      Unity/Assets/Settings/IgnoreAsmdef/ModelView.meta
  52. 8 0
      Unity/Assets/Settings/IgnoreAsmdef/ModelView/Client.meta
  53. 16 0
      Unity/Assets/Settings/IgnoreAsmdef/ModelView/Client/Ignore.asmdef.DISABLED
  54. 7 0
      Unity/Assets/Settings/IgnoreAsmdef/ModelView/Client/Ignore.asmdef.DISABLED.meta
  55. 2 0
      Unity/Assets/Settings/IgnoreAsmdef/README.txt
  56. 7 0
      Unity/Assets/Settings/IgnoreAsmdef/README.txt.meta
  57. 0 1
      Unity/Packages/manifest.json
  58. 0 7
      Unity/Packages/packages-lock.json

+ 43 - 70
.gitignore

@@ -1,80 +1,53 @@
-.cproject
-.project
-.pydevproject
-.sconsign.dblite
+#IDE文件
+.vs/
+.idea/
+.vscode/
+_ReSharper.CSharp/
 
-*.pyc
-*.suo
+#svn
+*/.svn/
+.svn/
 
-.settings/
-.localhistory/
-Dbg/
-Opt/
+#Excel的临时文件
+~$*.xlsx
+~$*.xlsx.meta
 
-*/Temp/
-*/TestResults/
+#Unity相关目录
+Unity/.gradle
+Unity/Bundles
+Unity/Library
+Unity/Logs
+Unity/UserSettings
+Unity/*.csproj
+Unity/*.vsconfig
+Unity/ProjectSettings/RiderScriptEditorPersistedState.asset
+Unity/HybridCLRData
 
-*/.svn/
-.svn/
+#Unity/Assets
+Unity/Assets/Bundles/Code/*
+Unity/Assets/Bundles/AotDlls/*
+Unity/Assets/StreamingAssets/
+Unity/Assets/StreamingAssets.meta
+
+#Unity中的IgnoreAssembly定义文件
+Unity/Assets/Scripts/**/Ignore.asmdef
+Unity/Assets/Scripts/**/Ignore.asmdef.meta
+
+#WebGL
+WebGL
+
+#其他
+.objs/
+.DS_Store
+/*.user
 bin/
 Bin/
-obj/
-_ReSharper.CSharp/
-*.opensdf
-*.sdf
-/CSharp/CSharp.sln.ide
-/Unity/Library
-/Unity/CSharp60Support/compilation log.txt
-/CSharp/CSharp.VC.opendb
-/Server/Server.VC.opendb
 /Log
-/Temp
 /Logs
-/Unity/CSharp60Support/compilation.log
-/.vs
-/Server/.vs/
-/Unity/.vs/
-/Tools/MongoDB
-/Excel/md5.txt
+obj/
 /Release
-.idea/
-/Unity/Logs
-/Unity/Assets/StreamingAssets/
-/Unity/Assets/StreamingAssets.meta
-.DS_Store
-Server/.DS_Store
-/Server/.vscode/
-.vs/
-.objs/
-/Unity/.gradle
-/*.user
-/Unity/Unity.Editor.csproj
-/Unity/Assembly-CSharp.csproj
-~$*.xlsx
-~$*.xlsx.meta
-/.vscode
-/Unity/UserSettings/Search.settings
-/Unity/Unity.Hotfix.csproj
-/Unity/Unity.HotfixView.csproj
-/Unity/Unity.Model.csproj
-/Unity/Unity.ModelView.csproj
-
-/Unity/ProjectSettings/RiderScriptEditorPersistedState.asset
-/Unity/Unity.Core.csproj
-/Unity/UserSettings
-/Unity/Unity.Codes.csproj
-/Unity/Unity.Loader.csproj
-/Unity/Unity.Ignore.csproj
+/Temp
+/Tools/MongoDB
 Publish/
-/Unity/Assets/Bundles/Code/*
-/Unity/Unity.GenerateClient.csproj
-/Unity/Unity.GenerateServer.csproj
-
-/Unity/Assets/Bundles/AotDlls/*
-/Unity/HybridCLRData
-/Unity/Assembly-CSharp-firstpass.csproj
-
-/Unity/*.csproj
-/Unity/*.vsconfig
-WebGL
-Unity/Bundles
+*/Temp/
+*/TestResults/

+ 7 - 7
Book/1.1运行指南.md

@@ -11,7 +11,7 @@
 
 4. 在Project视图中选中'Assets/Resources/GlobalConfig',把AppType选择成'**Demo(状态同步)**'或者'**LockStep(帧同步)**'
 
-5. Assets/Resources/GlobalConfig CodeMode选择**Client Server**,打开Unity菜单 -> ET -> BuildTool,然后**点击ReGenerateProjectFiles**
+5. Assets/Resources/GlobalConfig CodeMode选择**Client Server**, 点击Unity菜单 -> ET -> Compile(或按快捷键**F6**)进行编译
 
 6. 打开ET.sln,**编译整个ET.sln**,注意要翻墙,否则可能nuget包下载不下来,导致编译出错(翻墙后如果还有报错解决不了可以尝试先用VS打开ET.sln编译一次后再回到Rider重新编译一次)
 
@@ -19,17 +19,17 @@
 
 8. 帧同步默认是一个人匹配,如果需要多人匹配,修改**LSConstValue.cs**中的**MatchCount** 客户端服务端重启即可
 
-9. 注意要独立启动服务器,右键UnityHub,以管理员身份运行UnityHub,然后启动Unity(没有管理员启动是不行的,因为服务端要开启http服务,普通权限开不了),  
+9. 注意要独立启动服务器,右键UnityHub,以管理员身份运行UnityHub,然后启动Unity(没有管理员启动是不行的,因为服务端要开启http服务,普通权限开不了),
    停止Unity Play,点开Unity菜单->ET->Server Tools->Start Server(Single Process),这样就单独启动了服务端。打开Unity菜单 -> ET -> BuildTool中CodeMode改成Client,点击Unity Play,登录。  
-   如果还是连接不上报10037错误,注意看ET/Logs目录,看有没有Error日志。 如果要用rider启动服务器,rider也必须用管理员权限启动   
-   注意一定要用 netsh http delete urlacl 命令删除掉所有自己添加的urlacl,具体使用方法请谷歌  
+   如果还是连接不上报10037错误,注意看ET/Logs目录,看有没有Error日志。 如果要用rider启动服务器,rider也必须用管理员权限启动
+   注意一定要用 netsh http delete urlacl 命令删除掉所有自己添加的urlacl,具体使用方法请谷歌
 
-10. 有问题请论坛提问,贴出服务端error log跟客户端error log,没有日志无法回复  
+10. 有问题请论坛提问,贴出服务端error log跟客户端error log,没有日志无法回复
 
 # 打包过程
 1. 点击HybridCLR -> Installer,点击安装,等待安装完成
 
-2. 点击Player按钮左边的Compile按钮进行编译
+2. 点击Unity菜单 -> ET -> Compile(或按快捷键**F6**)进行编译
 
 3. 点击HybridCLR -> Generate -> All
 
@@ -44,7 +44,7 @@
 # 热重载
 1. 若需要体验此功能,需要在Unity菜单 -> Edit -> Preferences -> General窗口的 'ScriptChangesWhilePlaying' 中 选择 '**RecompileAfterFinishedPlaying**'
 
-2. 运行后修改代码,点击Player左边的Reload按钮即可
+2. 运行后修改并编译代码,点击Unity菜单 -> ET -> Reload(或按快捷键**F7**)即可
 
 # 注意事项:
 

+ 73 - 77
Unity/Assets/Scripts/Editor/Assembly/AssemblyEditor.cs

@@ -1,5 +1,4 @@
 using System.IO;
-using System.Threading;
 using UnityEditor;
 using UnityEngine;
 
@@ -7,88 +6,85 @@ namespace ET
 {
     public static class AssemblyEditor
     {
-        public static SynchronizationContext UnitySynchronizationContext { get; private set; }
-        
         [InitializeOnLoadMethod]
         static void Initialize()
         {
-             UnitySynchronizationContext = SynchronizationContext.Current;
-             //删掉Library中Unity编译的dll,不然在编辑器下Assembly.Load多个dll时,dll会与Library中的dll引用错乱
-             EditorApplication.playModeStateChanged += change =>
-             {
-                 if (change == PlayModeStateChange.ExitingEditMode)
-                 {
-                     GlobalConfig globalConfig = Resources.Load<GlobalConfig>("GlobalConfig");
-                     if (globalConfig.EnableDll)
-                     {
-                         foreach (var dll in AssemblyTool.dllNames)
-                         {
-                             string dllFile = $"{Application.dataPath}/../Library/ScriptAssemblies/{dll}.dll";
-                             if (File.Exists(dllFile))
-                             {
-                                 string dllDisableFile = $"{Application.dataPath}/../Library/ScriptAssemblies/{dll}.dll.DISABLE";
-                                 if (File.Exists(dllDisableFile))
-                                 {
-                                     File.Delete(dllDisableFile);
-                                 }
+            EditorApplication.playModeStateChanged += change =>
+            {
+                switch (change)
+                {
+                    case PlayModeStateChange.ExitingEditMode:
+                        OnExitingEditMode();
+                        break;
+                    case PlayModeStateChange.ExitingPlayMode:
+                        OnExitingPlayMode();
+                        break;
+                }
+            };
+        }
+
+        /// <summary>
+        /// 退出编辑模式时处理(即将进入运行模式)
+        /// EnableDll模式时, 屏蔽掉Library的dll(通过改文件后缀方式屏蔽), 仅使用Define.CodeDir下的dll
+        /// </summary>
+        static void OnExitingEditMode()
+        {
+            GlobalConfig globalConfig = Resources.Load<GlobalConfig>("GlobalConfig");
+            if (!globalConfig.EnableDll)
+                return;
+
+            foreach (string dll in AssemblyTool.DllNames)
+            {
+                string dllFile = $"{Application.dataPath}/../Library/ScriptAssemblies/{dll}.dll";
+                if (File.Exists(dllFile))
+                {
+                    string dllDisableFile = $"{Application.dataPath}/../Library/ScriptAssemblies/{dll}.dll.DISABLE";
+                    if (File.Exists(dllDisableFile))
+                        File.Delete(dllDisableFile);
 
-                                 File.Move(dllFile, dllDisableFile);
-                             }
+                    File.Move(dllFile, dllDisableFile);
+                }
 
-                             string pdbFile = $"{Application.dataPath}/../Library/ScriptAssemblies/{dll}.pdb";
-                             if (File.Exists(pdbFile))
-                             {
-                                 string pdbDisableFile = $"{Application.dataPath}/../Library/ScriptAssemblies/{dll}.pdb.DISABLE";
-                                 if (File.Exists(pdbDisableFile))
-                                 {
-                                     File.Delete(pdbDisableFile);
-                                 }
+                string pdbFile = $"{Application.dataPath}/../Library/ScriptAssemblies/{dll}.pdb";
+                if (File.Exists(pdbFile))
+                {
+                    string pdbDisableFile = $"{Application.dataPath}/../Library/ScriptAssemblies/{dll}.pdb.DISABLE";
+                    if (File.Exists(pdbDisableFile))
+                        File.Delete(pdbDisableFile);
 
-                                 File.Move(pdbFile, pdbDisableFile);
-                             }
-                         }
-                     }
-                 }
-                 else if (change == PlayModeStateChange.ExitingPlayMode)
-                 {
-                     foreach (var dll in AssemblyTool.dllNames)
-                     {
-                         string dllFile = $"{Application.dataPath}/../Library/ScriptAssemblies/{dll}.dll";
-                         string dllDisableFile = $"{Application.dataPath}/../Library/ScriptAssemblies/{dll}.dll.DISABLE";
-                         if (File.Exists(dllFile))
-                         {
-                             if (File.Exists(dllDisableFile))
-                             {
-                                 File.Delete(dllDisableFile);
-                             }
-                         }
-                         else
-                         {
-                             if (File.Exists(dllDisableFile))
-                             {
-                                 File.Move(dllDisableFile, dllFile);
-                             }
-                         }
+                    File.Move(pdbFile, pdbDisableFile);
+                }
+            }
+        }
+
+        /// <summary>
+        /// 退出运行模式时处理(即将进入编辑模式)
+        /// 还原Library里面屏蔽掉的dll(HybridCLR或者非EnableDll模式都会用到这个目录下的dll, 故需要还原)
+        /// </summary>
+        static void OnExitingPlayMode()
+        {
+            foreach (string dll in AssemblyTool.DllNames)
+            {
+                string dllDisableFile = $"{Application.dataPath}/../Library/ScriptAssemblies/{dll}.dll.DISABLE";
+                if (File.Exists(dllDisableFile))
+                {
+                    string dllFile = $"{Application.dataPath}/../Library/ScriptAssemblies/{dll}.dll";
+                    if (File.Exists(dllFile))
+                        File.Delete(dllDisableFile);
+                    else
+                        File.Move(dllDisableFile, dllFile);
+                }
 
-                         string pdbDisableFile = $"{Application.dataPath}/../Library/ScriptAssemblies/{dll}.pdb.DISABLE";
-                         string pdbFile = $"{Application.dataPath}/../Library/ScriptAssemblies/{dll}.pdb";
-                         if (File.Exists(pdbFile))
-                         {
-                             if (File.Exists(pdbDisableFile))
-                             {
-                                 File.Delete(pdbDisableFile);
-                             }
-                         }
-                         else
-                         {
-                             if (File.Exists(pdbDisableFile))
-                             {
-                                 File.Move(pdbDisableFile, pdbFile);
-                             }
-                         }
-                     }
-                 }
-             };
+                string pdbDisableFile = $"{Application.dataPath}/../Library/ScriptAssemblies/{dll}.pdb.DISABLE";
+                if (File.Exists(pdbDisableFile))
+                {
+                    string pdbFile = $"{Application.dataPath}/../Library/ScriptAssemblies/{dll}.pdb";
+                    if (File.Exists(pdbFile))
+                        File.Delete(pdbDisableFile);
+                    else
+                        File.Move(pdbDisableFile, pdbFile);
+                }
+            }
         }
     }
-}
+}

+ 137 - 88
Unity/Assets/Scripts/Editor/Assembly/AssemblyTool.cs

@@ -8,112 +8,158 @@ namespace ET
 {
     public static class AssemblyTool
     {
-        public static readonly string[] dllNames = new[] { "Unity.Hotfix", "Unity.HotfixView", "Unity.Model", "Unity.ModelView" };
-        
-        private static BuildTarget GetBuildTarget(PlatformType type)
+        /// <summary>
+        /// Unity线程的同步上下文
+        /// </summary>
+        static SynchronizationContext unitySynchronizationContext { get; set; }
+
+        /// <summary>
+        /// 程序集名字数组
+        /// </summary>
+        public static readonly string[] DllNames = { "Unity.Hotfix", "Unity.HotfixView", "Unity.Model", "Unity.ModelView" };
+
+        [InitializeOnLoadMethod]
+        static void Initialize()
         {
-            switch (type)
-            {
-                case PlatformType.Windows:
-                    return BuildTarget.StandaloneWindows64;
-                case PlatformType.Android:
-                    return BuildTarget.Android;
-                case PlatformType.IOS:
-                    return BuildTarget.iOS;
-                case PlatformType.MacOS:
-                    return BuildTarget.StandaloneOSX;
-                case PlatformType.Linux:
-                    return BuildTarget.StandaloneLinux64;
-            }
+            unitySynchronizationContext = SynchronizationContext.Current;
+        }
+
+        /// <summary>
+        /// 菜单和快捷键编译按钮
+        /// </summary>
+        [MenuItem("ET/Compile _F6", false, ETMenuItemPriority.Compile)]
+        static void MenuItemOfCompile()
+        {
+            // 强制刷新一下,防止关闭auto refresh,文件修改时间不准确
+            AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate);
+
+            DoCompile();
+        }
+
+        /// <summary>
+        /// 菜单和快捷键热重载按钮
+        /// </summary>
+        [MenuItem("ET/Reload _F7", false, ETMenuItemPriority.Compile)]
+        static void MenuItemOfReload()
+        {
+            if (Application.isPlaying)
+                CodeLoader.Instance?.Reload();
+        }
+
+        /// <summary>
+        /// 执行编译代码流程
+        /// </summary>
+        public static void DoCompile()
+        {
+            // 强制刷新一下,防止关闭auto refresh,编译出老代码
+            AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate);
+
+            RefreshCodeMode();
+            RefreshBuildType();
+
+            bool isCompileOk = CompileDlls();
+            if (!isCompileOk)
+                return;
 
-            return BuildTarget.StandaloneWindows;
+            CopyHotUpdateDlls();
+            BuildHelper.ReGenerateProjectFiles();
         }
 
-        public static void RefreshCodeMode(CodeMode codeMode)
+        /// <summary>
+        /// 刷新代码模式
+        /// </summary>
+        static void RefreshCodeMode()
         {
+            CodeMode codeMode = CodeMode.ClientServer;
+            GlobalConfig globalConfig = Resources.Load<GlobalConfig>("GlobalConfig");
+            if (globalConfig)
+                codeMode = globalConfig.CodeMode;
+
             switch (codeMode)
             {
                 case CodeMode.Client:
-                    Enable_UNITY_CLIENT();
+                    EnableUnityClient();
                     break;
                 case CodeMode.Server:
-                    Enable_UNITY_SERVER();
+                    EnableUnityServer();
                     break;
                 case CodeMode.ClientServer:
-                    Enable_UNITY_CLIENTSERVER();
+                    EnableUnityClientServer();
                     break;
             }
+
+            AssetDatabase.Refresh();
         }
 
-        public static void DoCompile()
+        /// <summary>
+        /// 刷新构建类型
+        /// </summary>
+        static void RefreshBuildType()
         {
+            BuildType buildType = BuildType.Release;
             GlobalConfig globalConfig = Resources.Load<GlobalConfig>("GlobalConfig");
-            ScriptCompilationOptions options = globalConfig.BuildType == BuildType.Debug
-                    ? ScriptCompilationOptions.DevelopmentBuild
-                    : ScriptCompilationOptions.None;
-            CompileDlls(EditorUserBuildSettings.activeBuildTarget, options);
-            CopyHotUpdateDlls();
+            if (globalConfig)
+                buildType = globalConfig.BuildType;
+            EditorUserBuildSettings.development = buildType == BuildType.Debug;
         }
 
-        public static void CompileDlls(PlatformType platform, ScriptCompilationOptions options = ScriptCompilationOptions.None)
+        /// <summary>
+        /// 编译成dll
+        /// </summary>
+        static bool CompileDlls()
         {
-            CompileDlls(GetBuildTarget(platform), options);
-        }
+            // 运行时编译需要先设置为UnitySynchronizationContext, 编译完再还原为CurrentContext
+            SynchronizationContext lastSynchronizationContext = Application.isPlaying ? SynchronizationContext.Current : null;
+            SynchronizationContext.SetSynchronizationContext(unitySynchronizationContext);
+
+            bool isCompileOk = false;
 
-        public static void CompileDlls(BuildTarget target, ScriptCompilationOptions options = ScriptCompilationOptions.None)
-        {
-            //强制刷新一下,防止关闭auto refresh,编译出老代码
-            AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate);
-            SynchronizationContext lastSynchronizationContext = null;
-            if (Application.isPlaying) //运行时编译需要UnitySynchronizationContext
-            {
-                lastSynchronizationContext = SynchronizationContext.Current;
-                SynchronizationContext.SetSynchronizationContext(AssemblyEditor.UnitySynchronizationContext);
-            }
-            else
-            {
-                SynchronizationContext.SetSynchronizationContext(AssemblyEditor.UnitySynchronizationContext);
-            }
             try
             {
                 Directory.CreateDirectory(Define.BuildOutputDir);
+                BuildTarget target = EditorUserBuildSettings.activeBuildTarget;
                 BuildTargetGroup group = BuildPipeline.GetBuildTargetGroup(target);
-                ScriptCompilationSettings scriptCompilationSettings = new ScriptCompilationSettings();
-                scriptCompilationSettings.group = group;
-                scriptCompilationSettings.target = target;
-                scriptCompilationSettings.extraScriptingDefines = new[] { "UNITY_COMPILE" };
-                scriptCompilationSettings.options = options;
-                PlayerBuildInterface.CompilePlayerScripts(scriptCompilationSettings, Define.BuildOutputDir);
-#if UNITY_2022
+                ScriptCompilationSettings scriptCompilationSettings = new()
+                {
+                    group = group,
+                    target = target,
+                    extraScriptingDefines = new[] { "UNITY_COMPILE" },
+                    options = EditorUserBuildSettings.development ? ScriptCompilationOptions.DevelopmentBuild : ScriptCompilationOptions.None
+                };
+                ScriptCompilationResult result = PlayerBuildInterface.CompilePlayerScripts(scriptCompilationSettings, Define.BuildOutputDir);
+                isCompileOk = result.assemblies.Count > 0;
                 EditorUtility.ClearProgressBar();
-#endif
-                Debug.Log("compile finish!!!");
             }
             finally
             {
-                if (Application.isPlaying && lastSynchronizationContext != null)
-                {
+                if (lastSynchronizationContext != null)
                     SynchronizationContext.SetSynchronizationContext(lastSynchronizationContext);
-                }
             }
+
+            return isCompileOk;
         }
 
+        /// <summary>
+        /// 将dll文件复制到加载目录
+        /// </summary>
         static void CopyHotUpdateDlls()
         {
             FileHelper.CleanDirectory(Define.CodeDir);
-            foreach (var dllName in dllNames)
+            foreach (string dllName in DllNames)
             {
                 string sourceDll = $"{Define.BuildOutputDir}/{dllName}.dll";
                 string sourcePdb = $"{Define.BuildOutputDir}/{dllName}.pdb";
                 File.Copy(sourceDll, $"{Define.CodeDir}/{dllName}.dll.bytes", true);
                 File.Copy(sourcePdb, $"{Define.CodeDir}/{dllName}.pdb.bytes", true);
-                Debug.Log($"copy:{Define.BuildOutputDir}/{dllName} => {Define.CodeDir}/{dllName}");
             }
 
-            Debug.Log("copy finish!!!");
+            AssetDatabase.Refresh();
         }
 
-        public static void Enable_UNITY_CLIENT()
+        /// <summary>
+        /// 启用纯客户端模式
+        /// </summary>
+        static void EnableUnityClient()
         {
             DisableAsmdef("Assets/Scripts/Model/Generate/Client/Ignore.asmdef");
             EnableAsmdef("Assets/Scripts/Model/Generate/Server/Ignore.asmdef");
@@ -121,15 +167,18 @@ namespace ET
 
             DisableAsmdef("Assets/Scripts/Model/Client/Ignore.asmdef");
             EnableAsmdef("Assets/Scripts/Model/Server/Ignore.asmdef");
+
             DisableAsmdef("Assets/Scripts/Hotfix/Client/Ignore.asmdef");
             EnableAsmdef("Assets/Scripts/Hotfix/Server/Ignore.asmdef");
 
-            DisableAsmdef("Assets/Scripts/HotfixView/Client/Ignore.asmdef");
             DisableAsmdef("Assets/Scripts/ModelView/Client/Ignore.asmdef");
-            AssetDatabase.Refresh();
+            DisableAsmdef("Assets/Scripts/HotfixView/Client/Ignore.asmdef");
         }
 
-        public static void Enable_UNITY_SERVER()
+        /// <summary>
+        /// 启用纯服务端模式
+        /// </summary>
+        static void EnableUnityServer()
         {
             EnableAsmdef("Assets/Scripts/Model/Generate/Client/Ignore.asmdef");
             EnableAsmdef("Assets/Scripts/Model/Generate/Server/Ignore.asmdef");
@@ -137,15 +186,18 @@ namespace ET
 
             DisableAsmdef("Assets/Scripts/Model/Client/Ignore.asmdef");
             DisableAsmdef("Assets/Scripts/Model/Server/Ignore.asmdef");
+
             DisableAsmdef("Assets/Scripts/Hotfix/Client/Ignore.asmdef");
             DisableAsmdef("Assets/Scripts/Hotfix/Server/Ignore.asmdef");
 
             EnableAsmdef("Assets/Scripts/HotfixView/Client/Ignore.asmdef");
             EnableAsmdef("Assets/Scripts/ModelView/Client/Ignore.asmdef");
-            AssetDatabase.Refresh();
         }
 
-        public static void Enable_UNITY_CLIENTSERVER()
+        /// <summary>
+        /// 启用双端模式
+        /// </summary>
+        static void EnableUnityClientServer()
         {
             EnableAsmdef("Assets/Scripts/Model/Generate/Client/Ignore.asmdef");
             EnableAsmdef("Assets/Scripts/Model/Generate/Server/Ignore.asmdef");
@@ -153,44 +205,41 @@ namespace ET
 
             DisableAsmdef("Assets/Scripts/Model/Client/Ignore.asmdef");
             DisableAsmdef("Assets/Scripts/Model/Server/Ignore.asmdef");
+
             DisableAsmdef("Assets/Scripts/Hotfix/Client/Ignore.asmdef");
             DisableAsmdef("Assets/Scripts/Hotfix/Server/Ignore.asmdef");
 
             DisableAsmdef("Assets/Scripts/HotfixView/Client/Ignore.asmdef");
             DisableAsmdef("Assets/Scripts/ModelView/Client/Ignore.asmdef");
-            AssetDatabase.Refresh();
         }
 
+        /// <summary>
+        /// 启用指定的程序集定义文件
+        /// </summary>
         static void EnableAsmdef(string asmdefFile)
         {
             string asmdefDisableFile = $"{asmdefFile}.DISABLED";
-            if (File.Exists(asmdefDisableFile))
+            string srcFilePath = asmdefDisableFile.Replace("Assets/Scripts/", "Assets/Settings/IgnoreAsmdef/");
+
+            if (!File.Exists(srcFilePath))
             {
-                if (File.Exists(asmdefFile))
-                {
-                    File.Delete(asmdefFile);
-                    File.Delete($"{asmdefFile}.meta");
-                }
-                File.Move(asmdefDisableFile, asmdefFile);
-                File.Delete(asmdefDisableFile);
-                File.Delete($"{asmdefDisableFile}.meta");
+                Debug.LogError($"忽略编译配置的原文件不存在, 请检查项目文件完整性:{srcFilePath}");
+                return;
             }
+
+            if (File.Exists(asmdefFile) && new FileInfo(srcFilePath).LastWriteTime == new FileInfo(asmdefFile).LastWriteTime)
+                return;
+
+            File.Copy(srcFilePath, asmdefFile, true);
         }
 
+        /// <summary>
+        /// 删除指定的程序集定义文件
+        /// </summary>
         static void DisableAsmdef(string asmdefFile)
         {
-            if (File.Exists(asmdefFile))
-            {
-                string asmdefDisableFile = $"{asmdefFile}.DISABLED";
-                if (File.Exists(asmdefDisableFile))
-                {
-                    File.Delete(asmdefDisableFile);
-                    File.Delete($"{asmdefDisableFile}.meta");
-                }
-                File.Move(asmdefFile, asmdefDisableFile);
-                File.Delete(asmdefFile);
-                File.Delete($"{asmdefFile}.meta");
-            }
+            File.Delete(asmdefFile);
+            File.Delete($"{asmdefFile}.meta");
         }
     }
-}
+}

+ 74 - 82
Unity/Assets/Scripts/Editor/AssetPostProcessor/OnGenerateCSProjectProcessor.cs

@@ -1,4 +1,5 @@
 using System.IO;
+using System.Text.RegularExpressions;
 using System.Xml;
 using UnityEditor;
 using UnityEngine;
@@ -8,22 +9,14 @@ namespace ET
     public class OnGenerateCSProjectProcessor: AssetPostprocessor
     {
         /// <summary>
+        /// 对生成的C#项目文件(.csproj)进行处理
         /// 文档:https://learn.microsoft.com/zh-cn/visualstudio/gamedev/unity/extensibility/customize-project-files-created-by-vstu#%E6%A6%82%E8%A7%88
         /// </summary>
         public static string OnGeneratedCSProject(string path, string content)
         {
-            BuildType buildType = BuildType.Debug;
-            CodeMode codeMode = CodeMode.Client;
             GlobalConfig globalConfig = Resources.Load<GlobalConfig>("GlobalConfig");
-            // 初次打开工程时会加载失败, 因为此时Unity的资源数据库(AssetDatabase)还未完成初始化
-            if (globalConfig)
-            {
-                buildType = globalConfig.BuildType;
-                codeMode = globalConfig.CodeMode;
-            }
-            //刷新一下CodeMode,防止某些本地修改CodeMode测试后,使用svn更新,被改名的Ignore.asmdef被还原的问题
-            AssemblyTool.RefreshCodeMode(codeMode);
-
+            // 判空原因:初次打开工程时会加载失败, 因为此时Unity的资源数据库(AssetDatabase)还未完成初始化
+            BuildType buildType = globalConfig != null? globalConfig.BuildType : BuildType.Release;
             if (buildType == BuildType.Release)
             {
                 content = content.Replace("<Optimize>false</Optimize>", "<Optimize>true</Optimize>");
@@ -31,49 +24,37 @@ namespace ET
             }
 
             if (path.EndsWith("Unity.Core.csproj"))
-            {
-                content = GenerateCustomProject(content);
-            }
+                return GenerateCustomProject(content);
 
-            if (path.EndsWith("Unity.ModelView.csproj"))
-            {
-                content = GenerateCustomProject(content);
-                content = AddCopyAfterBuild(content);
-            }
-
-            if (path.EndsWith("Unity.HotfixView.csproj"))
-            {
-                content = GenerateCustomProject(content);
-                content = AddCopyAfterBuild(content);
-            }
-
-            if (path.EndsWith("Unity.Model.csproj"))
-            {
-                content = GenerateCustomProject(content);
-                content = AddCopyAfterBuild(content);
-            }
+            if (path.EndsWith("Unity.Model.csproj") || path.EndsWith("Unity.Hotfix.csproj"))
+                return AddCopyAfterBuild(GenerateCustomProject(content));
 
-            if (path.EndsWith("Unity.Hotfix.csproj"))
-            {
-                content = GenerateCustomProject(content);
-                content = AddCopyAfterBuild(content);
-            }
+            if (path.EndsWith("Unity.ModelView.csproj") || path.EndsWith("Unity.HotfixView.csproj"))
+                return AddCopyAfterBuild(GenerateCustomProject(content));
 
             return content;
         }
 
         /// <summary>
-        /// 编译dll文件后额外复制的目录配置
+        /// 对生成的解决方案文件(.sln)进行处理, 此处主要为了隐藏一些没有作用的C#项目
         /// </summary>
-        private static string AddCopyAfterBuild(string content)
+        public static string OnGeneratedSlnSolution(string _, string content)
         {
-            content = content.Replace("<Target Name=\"AfterBuild\" />",
-                "<Target Name=\"PostBuild\" AfterTargets=\"PostBuildEvent\">\n" +
-                $"    <Copy SourceFiles=\"$(TargetDir)/$(TargetName).dll\" DestinationFiles=\"$(ProjectDir)/{Define.CodeDir}/$(TargetName).dll.bytes\" ContinueOnError=\"false\" />\n" +
-                $"    <Copy SourceFiles=\"$(TargetDir)/$(TargetName).pdb\" DestinationFiles=\"$(ProjectDir)/{Define.CodeDir}/$(TargetName).pdb.bytes\" ContinueOnError=\"false\" />\n" +
-                $"    <Copy SourceFiles=\"$(TargetDir)/$(TargetName).dll\" DestinationFiles=\"$(ProjectDir)/{Define.BuildOutputDir}/$(TargetName).dll\" ContinueOnError=\"false\" />\n" +
-                $"    <Copy SourceFiles=\"$(TargetDir)/$(TargetName).pdb\" DestinationFiles=\"$(ProjectDir)/{Define.BuildOutputDir}/$(TargetName).pdb\" ContinueOnError=\"false\" />\n" +
-                "  </Target>\n");
+            // Client
+            content = HideCSProject(content, "Ignore.Generate.Client.csproj");
+            content = HideCSProject(content, "Ignore.Model.Client.csproj");
+            content = HideCSProject(content, "Ignore.Hotfix.Client.csproj");
+            content = HideCSProject(content, "Ignore.ModelView.Client.csproj");
+            content = HideCSProject(content, "Ignore.HotfixView.Client.csproj");
+
+            // Server
+            content = HideCSProject(content, "Ignore.Generate.Server.csproj");
+            content = HideCSProject(content, "Ignore.Model.Server.csproj");
+            content = HideCSProject(content, "Ignore.Hotfix.Server.csproj");
+
+            // ClientServer
+            content = HideCSProject(content, "Ignore.Generate.ClientServer.csproj");
+
             return content;
         }
 
@@ -84,49 +65,39 @@ namespace ET
         /// https://learn.microsoft.com/zh-cn/visualstudio/ide/reference/build-events-page-project-designer-csharp?view=vs-2022
         /// https://learn.microsoft.com/zh-cn/visualstudio/ide/how-to-specify-build-events-csharp?view=vs-2022
         /// </summary>
-        private static string GenerateCustomProject(string content, params string[] links)
+        static string GenerateCustomProject(string content)
         {
-            XmlDocument doc = new XmlDocument();
+            XmlDocument doc = new();
             doc.LoadXml(content);
-
             var newDoc = doc.Clone() as XmlDocument;
-
             var rootNode = newDoc.GetElementsByTagName("Project")[0];
 
-            var target = newDoc.CreateElement("Target", newDoc.DocumentElement.NamespaceURI);
-            target.SetAttribute("Name", "AfterBuild");
-            rootNode.AppendChild(target);
-
-            XmlElement itemGroup = newDoc.CreateElement("ItemGroup", newDoc.DocumentElement.NamespaceURI);
-            foreach (var s in links)
+            // 添加分析器引用
             {
-                string[] ss = s.Split(' ');
-                string p = ss[0];
-                string linkStr = ss[1];
-                XmlElement compile = newDoc.CreateElement("Compile", newDoc.DocumentElement.NamespaceURI);
-                XmlElement link = newDoc.CreateElement("Link", newDoc.DocumentElement.NamespaceURI);
-                link.InnerText = linkStr;
-                compile.AppendChild(link);
-                compile.SetAttribute("Include", p);
-                itemGroup.AppendChild(compile);
+                XmlElement itemGroup = newDoc.CreateElement("ItemGroup", newDoc.DocumentElement.NamespaceURI);
+                var projectReference = newDoc.CreateElement("ProjectReference", newDoc.DocumentElement.NamespaceURI);
+                projectReference.SetAttribute("Include", @"..\Share\Analyzer\Share.Analyzer.csproj");
+                projectReference.SetAttribute("OutputItemType", @"Analyzer");
+                projectReference.SetAttribute("ReferenceOutputAssembly", @"false");
+
+                var project = newDoc.CreateElement("Project", newDoc.DocumentElement.NamespaceURI);
+                project.InnerText = @"{d1f2986b-b296-4a2d-8f12-be9f470014c3}";
+                projectReference.AppendChild(project);
+
+                var name = newDoc.CreateElement("Name", newDoc.DocumentElement.NamespaceURI);
+                name.InnerText = "Analyzer";
+                projectReference.AppendChild(name);
+
+                itemGroup.AppendChild(projectReference);
+                rootNode.AppendChild(itemGroup);
             }
 
-            var projectReference = newDoc.CreateElement("ProjectReference", newDoc.DocumentElement.NamespaceURI);
-            projectReference.SetAttribute("Include", @"..\Share\Analyzer\Share.Analyzer.csproj");
-            projectReference.SetAttribute("OutputItemType", @"Analyzer");
-            projectReference.SetAttribute("ReferenceOutputAssembly", @"false");
-
-            var project = newDoc.CreateElement("Project", newDoc.DocumentElement.NamespaceURI);
-            project.InnerText = @"{d1f2986b-b296-4a2d-8f12-be9f470014c3}";
-            projectReference.AppendChild(project);
-
-            var name = newDoc.CreateElement("Name", newDoc.DocumentElement.NamespaceURI);
-            name.InnerText = "Analyzer";
-            projectReference.AppendChild(project);
-
-            itemGroup.AppendChild(projectReference);
-
-            rootNode.AppendChild(itemGroup);
+            // AfterBuild(字符串替换后作用是编译后复制到CodeDir)
+            {
+                var target = newDoc.CreateElement("Target", newDoc.DocumentElement.NamespaceURI);
+                target.SetAttribute("Name", "AfterBuild");
+                rootNode.AppendChild(target);
+            }
 
             using StringWriter sw = new();
             using XmlTextWriter tx = new(sw);
@@ -135,6 +106,27 @@ namespace ET
             tx.Flush();
             return sw.GetStringBuilder().ToString();
         }
-    }
-}
 
+        /// <summary>
+        /// 编译dll文件后额外复制的目录配置
+        /// </summary>
+        static string AddCopyAfterBuild(string content)
+        {
+            return content.Replace("<Target Name=\"AfterBuild\" />",
+                "<Target Name=\"PostBuild\" AfterTargets=\"PostBuildEvent\">\n" +
+                $"    <Copy SourceFiles=\"$(TargetDir)/$(TargetName).dll\" DestinationFiles=\"$(ProjectDir)/{Define.CodeDir}/$(TargetName).dll.bytes\" ContinueOnError=\"false\" />\n" +
+                $"    <Copy SourceFiles=\"$(TargetDir)/$(TargetName).pdb\" DestinationFiles=\"$(ProjectDir)/{Define.CodeDir}/$(TargetName).pdb.bytes\" ContinueOnError=\"false\" />\n" +
+                $"    <Copy SourceFiles=\"$(TargetDir)/$(TargetName).dll\" DestinationFiles=\"$(ProjectDir)/{Define.BuildOutputDir}/$(TargetName).dll\" ContinueOnError=\"false\" />\n" +
+                $"    <Copy SourceFiles=\"$(TargetDir)/$(TargetName).pdb\" DestinationFiles=\"$(ProjectDir)/{Define.BuildOutputDir}/$(TargetName).pdb\" ContinueOnError=\"false\" />\n" +
+                "  </Target>\n");
+        }
+
+        /// <summary>
+        /// 隐藏指定项目
+        /// </summary>
+        static string HideCSProject(string content, string projectName)
+        {
+            return Regex.Replace(content, $"Project.*{projectName}.*\nEndProject", string.Empty);
+        }
+    }
+}

+ 21 - 13
Unity/Assets/Scripts/Editor/BuildEditor/BuildEditor.cs

@@ -1,5 +1,4 @@
-using System.IO;
-using UnityEditor;
+using UnityEditor;
 using UnityEngine;
 using YooAsset;
 
@@ -15,6 +14,19 @@ namespace ET
         Linux
     }
 
+    /// <summary>
+    /// ET菜单顺序
+    /// </summary>
+    public static class ETMenuItemPriority
+    {
+        public const int BuildTool = 1001;
+        public const int ChangeDefine = 1002;
+        public const int Compile = 1003;
+        public const int Reload = 1004;
+        public const int NavMesh = 1005;
+        public const int ServerTools = 1006;
+    }
+
     public class BuildEditor : EditorWindow
     {
         private PlatformType activePlatform;
@@ -23,7 +35,7 @@ namespace ET
 
         private GlobalConfig globalConfig;
 
-        [MenuItem("ET/Build Tool")]
+        [MenuItem("ET/Build Tool", false, ETMenuItemPriority.BuildTool)]
         public static void ShowWindow()
         {
             GetWindow<BuildEditor>(DockDefine.Types);
@@ -51,8 +63,9 @@ namespace ET
 
         private void OnGUI()
         {
+            EditorGUILayout.LabelField("PlatformType ");
             this.platformType = (PlatformType)EditorGUILayout.EnumPopup(platformType);
-            
+
             EditorGUILayout.LabelField("BuildOptions ");
             this.buildOptions = (BuildOptions)EditorGUILayout.EnumFlagsField(this.buildOptions);
 
@@ -68,13 +81,13 @@ namespace ET
 
                 if (this.globalConfig.CodeMode != CodeMode.Client)
                 {
-                    Log.Error("build package CodeMode must be CodeMode.Client, please select Client, RegenerateCSProject, then rebuild Hotfix and Model !!!");
+                    Log.Error("build package CodeMode must be CodeMode.Client, please select Client");
                     return;
                 }
 
                 if (this.globalConfig.EPlayMode == EPlayMode.EditorSimulateMode)
                 {
-                    Log.Error("build package EPlayMode must not be EPlayMode.EditorSimulateMode, please select EditorMode");
+                    Log.Error("build package EPlayMode must not be EPlayMode.EditorSimulateMode, please select HostPlayMode");
                     return;
                 }
 
@@ -92,15 +105,10 @@ namespace ET
                             break;
                     }
                 }
+
                 BuildHelper.Build(this.platformType, this.buildOptions);
                 return;
             }
-            
-            if (GUILayout.Button("ReGenerateProjectFiles"))
-            {
-                BuildHelper.ReGenerateProjectFiles();
-                return;
-            }
 
             if (GUILayout.Button("ExcelExporter"))
             {
@@ -117,4 +125,4 @@ namespace ET
             GUILayout.Space(5);
         }
     }
-}
+}

+ 17 - 8
Unity/Assets/Scripts/Editor/BuildEditor/BuildHelper.cs

@@ -1,6 +1,6 @@
-using System.IO;
 using System.Linq;
 using UnityEditor;
+using UnityEditor.Build.Reporting;
 using UnityEngine;
 
 namespace ET
@@ -15,17 +15,16 @@ namespace ET
         public static void ReGenerateProjectFiles()
         {
             Unity.CodeEditor.CodeEditor.CurrentEditor.SyncAll();
-            Debug.Log("ReGenerateProjectFiles finished.");
         }
 
 #if ENABLE_VIEW
-        [MenuItem("ET/ChangeDefine/Remove ENABLE_VIEW")]
+        [MenuItem("ET/ChangeDefine/Remove ENABLE_VIEW", false, ETMenuItemPriority.ChangeDefine)]
         public static void RemoveEnableView()
         {
             EnableDefineSymbols("ENABLE_VIEW", false);
         }
 #else
-        [MenuItem("ET/ChangeDefine/Add ENABLE_VIEW")]
+        [MenuItem("ET/ChangeDefine/Add ENABLE_VIEW", false, MenuItemPriority.ChangeDefine)]
         public static void AddEnableView()
         {
             EnableDefineSymbols("ENABLE_VIEW", true);
@@ -42,6 +41,7 @@ namespace ET
                 {
                     return;
                 }
+
                 ss.Add(symbols);
             }
             else
@@ -50,8 +50,10 @@ namespace ET
                 {
                     return;
                 }
+
                 ss.Remove(symbols);
             }
+
             Debug.Log($"EnableDefineSymbols {symbols} {enable}");
             defines = string.Join(";", ss);
             PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, defines);
@@ -86,12 +88,19 @@ namespace ET
             }
 
             AssetDatabase.Refresh();
-            string[] levels = {
-                "Assets/Scenes/Init.unity",
-            };
+
             Debug.Log("start build exe");
-            BuildPipeline.BuildPlayer(levels, $"{relativeDirPrefix}/{exeName}", buildTarget, buildOptions);
+
+            string[] levels = { "Assets/Scenes/Init.unity" };
+            BuildReport report = BuildPipeline.BuildPlayer(levels, $"{relativeDirPrefix}/{exeName}", buildTarget, buildOptions);
+            if (report.summary.result != BuildResult.Succeeded)
+            {
+                Debug.Log($"BuildResult:{report.summary.result}");
+                return;
+            }
+
             Debug.Log("finish build exe");
+            EditorUtility.OpenWithDefaultApp(relativeDirPrefix);
         }
     }
 }

+ 12 - 16
Unity/Assets/Scripts/Editor/GlobalConfigEditor/GlobalConfigEditor.cs

@@ -13,39 +13,35 @@ namespace ET
         {
             GlobalConfig globalConfig = (GlobalConfig)this.target;
             this.codeMode = globalConfig.CodeMode;
-            globalConfig.BuildType = EditorUserBuildSettings.development? BuildType.Debug : BuildType.Release;
+            globalConfig.BuildType = EditorUserBuildSettings.development ? BuildType.Debug : BuildType.Release;
             this.buildType = globalConfig.BuildType;
         }
 
         public override void OnInspectorGUI()
         {
             base.OnInspectorGUI();
+
             GlobalConfig globalConfig = (GlobalConfig)this.target;
+
             if (this.codeMode != globalConfig.CodeMode)
             {
                 this.codeMode = globalConfig.CodeMode;
                 this.serializedObject.Update();
-                AssemblyTool.RefreshCodeMode(globalConfig.CodeMode);
+                AssemblyTool.DoCompile();
             }
 
             if (this.buildType != globalConfig.BuildType)
             {
                 this.buildType = globalConfig.BuildType;
-
-                switch (this.buildType)
+                EditorUserBuildSettings.development = this.buildType switch
                 {
-                    case BuildType.Debug:
-                        EditorUserBuildSettings.development = true;
-                        break;
-                    case BuildType.Release:
-                        EditorUserBuildSettings.development = false;
-                        break;
-                    default:
-                        throw new ArgumentOutOfRangeException();
-                }
-                
-                BuildHelper.ReGenerateProjectFiles();
+                    BuildType.Debug => true,
+                    BuildType.Release => false,
+                    _ => throw new ArgumentOutOfRangeException()
+                };
+                this.serializedObject.Update();
+                AssemblyTool.DoCompile();
             }
         }
     }
-}
+}

+ 1 - 1
Unity/Assets/Scripts/Editor/RecastNavDataExporter/NavMeshExporter.cs

@@ -71,7 +71,7 @@ namespace ETEditor
         private static string outputServerFolder = "../Config/RecastNavData/ExportedObj/";
 
         #region 菜单主函数
-        [MenuItem("ET/NavMesh/ExportSceneObj")]
+        [MenuItem("ET/NavMesh/ExportSceneObj", false, ETMenuItemPriority.NavMesh)]
         public static void ExportScene()
         {
             var triangulation = UnityEngine.AI.NavMesh.CalculateTriangulation();

+ 9 - 10
Unity/Assets/Scripts/Editor/ServerCommandLineEditor/ServerCommandLineEditor.cs

@@ -1,5 +1,4 @@
-using System;
-using System.IO;
+using System.IO;
 using System.Linq;
 using UnityEditor;
 using UnityEngine;
@@ -12,15 +11,15 @@ namespace ET
         开发 = 1,
         压测 = 2,
     }
-    
+
     public class ServerCommandLineEditor: EditorWindow
     {
-        [MenuItem("ET/ServerTools")]
+        [MenuItem("ET/ServerTools", false, ETMenuItemPriority.ServerTools)]
         public static void ShowWindow()
         {
             GetWindow<ServerCommandLineEditor>(DockDefine.Types);
         }
-        
+
         private int selectStartConfigIndex = 1;
         private string[] startConfigs;
         private string startConfig;
@@ -36,20 +35,20 @@ namespace ET
         {
             selectStartConfigIndex = EditorGUILayout.Popup(selectStartConfigIndex, this.startConfigs);
             this.startConfig = this.startConfigs[this.selectStartConfigIndex];
-            this.developMode = (DevelopMode) EditorGUILayout.EnumPopup("起服模式:", this.developMode);
+            this.developMode = (DevelopMode)EditorGUILayout.EnumPopup("起服模式:", this.developMode);
 
             string dotnet = "dotnet.exe";
-            
+
 #if UNITY_EDITOR_OSX
             dotnet = "dotnet";
 #endif
-            
+
             if (GUILayout.Button("Start Server(Single Process)"))
             {
                 string arguments = $"App.dll --Process=1 --StartConfig=StartConfig/{this.startConfig} --Console=1";
                 ProcessHelper.Run(dotnet, arguments, "../Bin/");
             }
-            
+
             if (GUILayout.Button("Start Watcher"))
             {
                 string arguments = $"App.dll --AppType=Watcher --StartConfig=StartConfig/{this.startConfig} --Console=1";
@@ -62,4 +61,4 @@ namespace ET
             }
         }
     }
-}
+}

+ 1 - 3
Unity/Assets/Scripts/Editor/ToolEditor/ToolsEditor.cs

@@ -1,6 +1,4 @@
-using UnityEditor;
-
-namespace ET
+namespace ET
 {
     public static class ToolsEditor
     {

+ 0 - 39
Unity/Assets/Scripts/Editor/ToolbarExtension/CompileDllsToolbar.cs

@@ -1,39 +0,0 @@
-using ToolbarExtension;
-using UnityEditor;
-using UnityEngine;
-
-namespace ET
-{
-    public class CompileDllToolbar
-    {
-        private static readonly GUIContent reloadButtonGUIContent = new GUIContent("Reload", "Compile And Reload ET.Hotfix Dll When Playing.");
-        private static readonly GUIContent compileButtonGUIContent = new GUIContent("Compile", "Compile All ET Dll.");
-
-        [Toolbar(OnGUISide.Left, 0)]
-        static void OnToolbarGUI()
-        {
-            EditorGUI.BeginDisabledGroup(!Application.isPlaying);
-            {
-                if (GUILayout.Button(reloadButtonGUIContent))
-                {
-                    GlobalConfig globalConfig = Resources.Load<GlobalConfig>("GlobalConfig");
-                    if (!globalConfig.EnableDll)
-                    {
-                        Debug.LogError("Plaese reload after open EnableDll!");
-                        return;
-                    }
-                    AssemblyTool.DoCompile();
-                    CodeLoader.Instance.Reload();
-                    Debug.Log("reload success!");
-                }
-            }
-            EditorGUI.EndDisabledGroup();
-
-            if (GUILayout.Button(compileButtonGUIContent))
-            {
-                AssemblyTool.DoCompile();
-                Debug.Log("compile success!");
-            }
-        }
-    }
-}

+ 0 - 11
Unity/Assets/Scripts/Editor/ToolbarExtension/CompileDllsToolbar.cs.meta

@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: c7fd92dff5d343d49b4f56d5321457e5
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 1 - 2
Unity/Assets/Scripts/HotfixView/Client/Demo/Opera/OperaComponentSystem.cs

@@ -1,4 +1,3 @@
-using System;
 using UnityEngine;
 
 namespace ET.Client
@@ -33,7 +32,7 @@ namespace ET.Client
                 CodeLoader.Instance.Reload();
                 return;
             }
-        
+
             if (Input.GetKeyDown(KeyCode.T))
             {
                 C2M_TransferMap c2MTransferMap = C2M_TransferMap.Create();

+ 0 - 16
Unity/Assets/Scripts/HotfixView/Client/Ignore.asmdef.DISABLED

@@ -1,16 +0,0 @@
-{
-    "name": "Unity.Ignore.HotfixView.Client",
-    "rootNamespace": "",
-    "references": [],
-    "includePlatforms": [],
-    "excludePlatforms": [],
-    "allowUnsafeCode": false,
-    "overrideReferences": false,
-    "precompiledReferences": [],
-    "autoReferenced": true,
-    "defineConstraints": [
-        "IGNORE"
-    ],
-    "versionDefines": [],
-    "noEngineReferences": false
-}

+ 1 - 1
Unity/Assets/Scripts/Model/Generate/Client/Ignore.asmdef.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 13abf221f405f544fa594dc41d75e177
+guid: eed6afbe9c6c5394ca8cb3fa60e929e0
 AssemblyDefinitionImporter:
   externalObjects: {}
   userData: 

+ 0 - 16
Unity/Assets/Scripts/Model/Generate/ClientServer/Ignore.asmdef.DISABLED

@@ -1,16 +0,0 @@
-{
-    "name": "Unity.Ignore.Generate.ClientServer",
-    "rootNamespace": "",
-    "references": [],
-    "includePlatforms": [],
-    "excludePlatforms": [],
-    "allowUnsafeCode": false,
-    "overrideReferences": false,
-    "precompiledReferences": [],
-    "autoReferenced": true,
-    "defineConstraints": [
-        "IGNORE"
-    ],
-    "versionDefines": [],
-    "noEngineReferences": false
-}

+ 0 - 7
Unity/Assets/Scripts/Model/Generate/ClientServer/Ignore.asmdef.DISABLED.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: 8424f4e5ae94bc745a46e258ed60eeee
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 0 - 7
Unity/Assets/Scripts/Model/Server/Ignore.asmdef.DISABLED.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: 40bcb1f597a8a6b4f9264c192a9d5b6b
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 0 - 16
Unity/Assets/Scripts/ModelView/Client/Ignore.asmdef.DISABLED

@@ -1,16 +0,0 @@
-{
-    "name": "Unity.Ignore.ModelView.Client",
-    "rootNamespace": "",
-    "references": [],
-    "includePlatforms": [],
-    "excludePlatforms": [],
-    "allowUnsafeCode": false,
-    "overrideReferences": false,
-    "precompiledReferences": [],
-    "autoReferenced": true,
-    "defineConstraints": [
-        "IGNORE"
-    ],
-    "versionDefines": [],
-    "noEngineReferences": false
-}

+ 0 - 7
Unity/Assets/Scripts/ModelView/Client/Ignore.asmdef.DISABLED.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: 8e17e9e51dbd89f4aa05b2517e8f26f5
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 1 - 1
Unity/Assets/Scripts/Editor/ToolbarExtension.meta → Unity/Assets/Settings/IgnoreAsmdef.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: e3c94c26a37914a4f87ef1c6252e6c72
+guid: ab789a178ea67864fbbddbe59a20be83
 folderAsset: yes
 DefaultImporter:
   externalObjects: {}

+ 8 - 0
Unity/Assets/Settings/IgnoreAsmdef/Hotfix.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a8c73a36072eba3428a3bc1492a3230e
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Unity/Assets/Settings/IgnoreAsmdef/Hotfix/Client.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 06b82dc043ec3094394e95c4014f32fc
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 1 - 1
Unity/Assets/Scripts/Model/Server/Ignore.asmdef.DISABLED → Unity/Assets/Settings/IgnoreAsmdef/Hotfix/Client/Ignore.asmdef.DISABLED

@@ -1,5 +1,5 @@
 {
-    "name": "Unity.Ignore.Model.Server",
+    "name": "Ignore.Hotfix.Client",
     "rootNamespace": "",
     "references": [],
     "includePlatforms": [],

+ 1 - 1
Unity/Assets/Scripts/Model/Client/Ignore.asmdef.DISABLED.meta → Unity/Assets/Settings/IgnoreAsmdef/Hotfix/Client/Ignore.asmdef.DISABLED.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: cb3196364392508478da47b24030137d
+guid: de6fa04b596a40249abf616d06b292cf
 DefaultImporter:
   externalObjects: {}
   userData: 

+ 8 - 0
Unity/Assets/Settings/IgnoreAsmdef/Hotfix/Server.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 34e4bdcc77fe10844b9018f1b0ebde27
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 1 - 1
Unity/Assets/Scripts/Model/Client/Ignore.asmdef.DISABLED → Unity/Assets/Settings/IgnoreAsmdef/Hotfix/Server/Ignore.asmdef.DISABLED

@@ -1,5 +1,5 @@
 {
-    "name": "Unity.Ignore.Model.Client",
+    "name": "Ignore.Hotfix.Server",
     "rootNamespace": "",
     "references": [],
     "includePlatforms": [],

+ 7 - 0
Unity/Assets/Settings/IgnoreAsmdef/Hotfix/Server/Ignore.asmdef.DISABLED.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 827259516e239bd4b8911c6ee297e070
+AssemblyDefinitionImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Unity/Assets/Settings/IgnoreAsmdef/HotfixView.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 85a03f138ad837946bff0317335a840d
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Unity/Assets/Settings/IgnoreAsmdef/HotfixView/Client.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c02cc22842bdeb84f8edb779369d0b91
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 1 - 1
Unity/Assets/Scripts/Hotfix/Server/Ignore.asmdef.DISABLED → Unity/Assets/Settings/IgnoreAsmdef/HotfixView/Client/Ignore.asmdef.DISABLED

@@ -1,5 +1,5 @@
 {
-    "name": "Unity.Ignore.Hotfix.Server",
+    "name": "Ignore.HotfixView.Client",
     "rootNamespace": "",
     "references": [],
     "includePlatforms": [],

+ 1 - 1
Unity/Assets/Scripts/Hotfix/Client/Ignore.asmdef.DISABLED.meta → Unity/Assets/Settings/IgnoreAsmdef/HotfixView/Client/Ignore.asmdef.DISABLED.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: e9fd78ad5690d6145b5c4f0243a1f428
+guid: 1d02808fba1938d429693b69b6a091a8
 DefaultImporter:
   externalObjects: {}
   userData: 

+ 8 - 0
Unity/Assets/Settings/IgnoreAsmdef/Model.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 66f75608584349444acd9171fb96f0f2
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Unity/Assets/Settings/IgnoreAsmdef/Model/Client.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 19b993225527554498b2370235f215da
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 1 - 1
Unity/Assets/Scripts/Hotfix/Client/Ignore.asmdef.DISABLED → Unity/Assets/Settings/IgnoreAsmdef/Model/Client/Ignore.asmdef.DISABLED

@@ -1,5 +1,5 @@
 {
-    "name": "Unity.Ignore.Hotfix.Client",
+    "name": "Ignore.Model.Client",
     "rootNamespace": "",
     "references": [],
     "includePlatforms": [],

+ 1 - 1
Unity/Assets/Scripts/HotfixView/Client/Ignore.asmdef.DISABLED.meta → Unity/Assets/Settings/IgnoreAsmdef/Model/Client/Ignore.asmdef.DISABLED.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: a497ee9e16e5170498fff40b0fa38e59
+guid: 2c141d6067781964fb40dd63bdc2cc5a
 DefaultImporter:
   externalObjects: {}
   userData: 

+ 8 - 0
Unity/Assets/Settings/IgnoreAsmdef/Model/Generate.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 358226aacb358dc48b23cec22a1e8224
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Unity/Assets/Settings/IgnoreAsmdef/Model/Generate/Client.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: cbcd2aa55ede04c418e7a662ac1a43ef
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 16 - 0
Unity/Assets/Settings/IgnoreAsmdef/Model/Generate/Client/Ignore.asmdef.DISABLED

@@ -0,0 +1,16 @@
+{
+    "name": "Ignore.Generate.Client",
+    "rootNamespace": "",
+    "references": [],
+    "includePlatforms": [],
+    "excludePlatforms": [],
+    "allowUnsafeCode": false,
+    "overrideReferences": false,
+    "precompiledReferences": [],
+    "autoReferenced": true,
+    "defineConstraints": [
+        "IGNORE"
+    ],
+    "versionDefines": [],
+    "noEngineReferences": false
+}

+ 1 - 1
Unity/Assets/Scripts/Hotfix/Server/Ignore.asmdef.DISABLED.meta → Unity/Assets/Settings/IgnoreAsmdef/Model/Generate/Client/Ignore.asmdef.DISABLED.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: a719bae5d9bd519458cbb1f9296b6ccb
+guid: 067516e3052a2af4eb641d1ffc59a8de
 DefaultImporter:
   externalObjects: {}
   userData: 

+ 8 - 0
Unity/Assets/Settings/IgnoreAsmdef/Model/Generate/ClientServer.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: acccac95374e243419605c129112464f
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 16 - 0
Unity/Assets/Settings/IgnoreAsmdef/Model/Generate/ClientServer/Ignore.asmdef.DISABLED

@@ -0,0 +1,16 @@
+{
+    "name": "Ignore.Generate.ClientServer",
+    "rootNamespace": "",
+    "references": [],
+    "includePlatforms": [],
+    "excludePlatforms": [],
+    "allowUnsafeCode": false,
+    "overrideReferences": false,
+    "precompiledReferences": [],
+    "autoReferenced": true,
+    "defineConstraints": [
+        "IGNORE"
+    ],
+    "versionDefines": [],
+    "noEngineReferences": false
+}

+ 7 - 0
Unity/Assets/Settings/IgnoreAsmdef/Model/Generate/ClientServer/Ignore.asmdef.DISABLED.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: b6233ec7cb381bc46b469eacc1add3f6
+AssemblyDefinitionImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Unity/Assets/Settings/IgnoreAsmdef/Model/Generate/Server.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 960b7590505249e46af3edc2dbf53e32
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 16 - 0
Unity/Assets/Settings/IgnoreAsmdef/Model/Generate/Server/Ignore.asmdef.DISABLED

@@ -0,0 +1,16 @@
+{
+    "name": "Ignore.Generate.Server",
+    "rootNamespace": "",
+    "references": [],
+    "includePlatforms": [],
+    "excludePlatforms": [],
+    "allowUnsafeCode": false,
+    "overrideReferences": false,
+    "precompiledReferences": [],
+    "autoReferenced": true,
+    "defineConstraints": [
+        "IGNORE"
+    ],
+    "versionDefines": [],
+    "noEngineReferences": false
+}

+ 7 - 0
Unity/Assets/Settings/IgnoreAsmdef/Model/Generate/Server/Ignore.asmdef.DISABLED.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 5721cf2e08b4a8b45820243403dff9ca
+AssemblyDefinitionImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Unity/Assets/Settings/IgnoreAsmdef/Model/Server.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 231b24880401c484aa5a9e814570360f
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 16 - 0
Unity/Assets/Settings/IgnoreAsmdef/Model/Server/Ignore.asmdef.DISABLED

@@ -0,0 +1,16 @@
+{
+    "name": "Ignore.Model.Server",
+    "rootNamespace": "",
+    "references": [],
+    "includePlatforms": [],
+    "excludePlatforms": [],
+    "allowUnsafeCode": false,
+    "overrideReferences": false,
+    "precompiledReferences": [],
+    "autoReferenced": true,
+    "defineConstraints": [
+        "IGNORE"
+    ],
+    "versionDefines": [],
+    "noEngineReferences": false
+}

+ 7 - 0
Unity/Assets/Settings/IgnoreAsmdef/Model/Server/Ignore.asmdef.DISABLED.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: c608274982c66244999a5395ac8140ab
+AssemblyDefinitionImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Unity/Assets/Settings/IgnoreAsmdef/ModelView.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 4403dd2ce64bcb54395348d7b8b8de2c
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Unity/Assets/Settings/IgnoreAsmdef/ModelView/Client.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8ab9b6bf286202948a4b46685b50346e
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 16 - 0
Unity/Assets/Settings/IgnoreAsmdef/ModelView/Client/Ignore.asmdef.DISABLED

@@ -0,0 +1,16 @@
+{
+    "name": "Ignore.ModelView.Client",
+    "rootNamespace": "",
+    "references": [],
+    "includePlatforms": [],
+    "excludePlatforms": [],
+    "allowUnsafeCode": false,
+    "overrideReferences": false,
+    "precompiledReferences": [],
+    "autoReferenced": true,
+    "defineConstraints": [
+        "IGNORE"
+    ],
+    "versionDefines": [],
+    "noEngineReferences": false
+}

+ 7 - 0
Unity/Assets/Settings/IgnoreAsmdef/ModelView/Client/Ignore.asmdef.DISABLED.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 446bf408c1179c94091bd1a061a808e6
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 2 - 0
Unity/Assets/Settings/IgnoreAsmdef/README.txt

@@ -0,0 +1,2 @@
+CodeMode设置变动时, 会由此目录复制到对应的代码目录。
+如果使用版本管理软件,请记得在代码目录中忽略这些Ignore文件。

+ 7 - 0
Unity/Assets/Settings/IgnoreAsmdef/README.txt.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 68daac35c9406574aa962b7d062cee1d
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 0 - 1
Unity/Packages/manifest.json

@@ -11,7 +11,6 @@
     "com.unity.textmeshpro": "3.0.6",
     "com.unity.timeline": "1.7.6",
     "com.unity.ugui": "1.0.0",
-    "me.xw.toolbarextension": "https://github.com/XuToWei/ToolbarExtension.git",
     "com.unity.modules.ai": "1.0.0",
     "com.unity.modules.androidjni": "1.0.0",
     "com.unity.modules.animation": "1.0.0",

+ 0 - 7
Unity/Packages/packages-lock.json

@@ -183,13 +183,6 @@
         "com.unity.modules.imgui": "1.0.0"
       }
     },
-    "me.xw.toolbarextension": {
-      "version": "https://github.com/XuToWei/ToolbarExtension.git",
-      "depth": 0,
-      "source": "git",
-      "dependencies": {},
-      "hash": "a1b161133146d43d268a011b2389360ef975afd5"
-    },
     "com.unity.modules.ai": {
       "version": "1.0.0",
       "depth": 0,