소스 검색

1.编译工具,导表,导proto都放到Build Tool中
2.DllHelper改成CodeLoader,跟客户端一致

tanghai 3 년 전
부모
커밋
f2dd3fc279

+ 1 - 3
Codes/Hotfix/Server/Module/Console/ReloadDllConsoleHandler.cs

@@ -13,9 +13,7 @@ namespace ET.Server
                 case ConsoleMode.ReloadDll:
                 case ConsoleMode.ReloadDll:
                     contex.Parent.RemoveComponent<ModeContex>();
                     contex.Parent.RemoveComponent<ModeContex>();
                     
                     
-                    Dictionary<string, Type> types = AssemblyHelper.GetAssemblyTypes(typeof (Game).Assembly, typeof(Unit).Assembly, DllHelper.GetHotfixAssembly());
-                    
-                    Game.EventSystem.Add(types);
+                    CodeLoader.Instance.LoadHotfix();
                     
                     
                     Game.EventSystem.Load();
                     Game.EventSystem.Load();
                     break;
                     break;

+ 1 - 1
Codes/HotfixView/Client/Demo/Opera/OperaComponentSystem.cs

@@ -42,7 +42,7 @@ namespace ET.Client
 
 
             if (Input.GetKeyDown(KeyCode.R))
             if (Input.GetKeyDown(KeyCode.R))
             {
             {
-                CodeLoader.Instance.LoadLogic();
+                CodeLoader.Instance.LoadHotfix();
                 Game.EventSystem.Load();
                 Game.EventSystem.Load();
                 Log.Debug("hot reload success!");
                 Log.Debug("hot reload success!");
             }
             }

+ 1 - 3
Codes/Model/Server/Entry.cs

@@ -20,9 +20,7 @@ namespace ET.Server
             // 异步方法全部会回掉到主线程
             // 异步方法全部会回掉到主线程
             SynchronizationContext.SetSynchronizationContext(ThreadSynchronizationContext.Instance);
             SynchronizationContext.SetSynchronizationContext(ThreadSynchronizationContext.Instance);
             
             
-            Dictionary<string, Type> types = AssemblyHelper.GetAssemblyTypes(typeof(Game).Assembly, typeof(Entry).Assembly, DllHelper.GetHotfixAssembly());
-                    
-            Game.EventSystem.Add(types);
+            CodeLoader.Instance.LoadHotfix();
 				
 				
             MongoHelper.Register(Game.EventSystem.GetTypes());
             MongoHelper.Register(Game.EventSystem.GetTypes());
 
 

+ 12 - 5
DotNet/Model/DllHelper.cs → DotNet/Model/CodeLoader.cs

@@ -1,14 +1,18 @@
-using System.IO;
+using System;
+using System.Collections.Generic;
+using System.IO;
 using System.Reflection;
 using System.Reflection;
 using System.Runtime.Loader;
 using System.Runtime.Loader;
 
 
 namespace ET
 namespace ET
 {
 {
-    public static class DllHelper
+    public class CodeLoader
     {
     {
-        private static AssemblyLoadContext assemblyLoadContext;
+        public static CodeLoader Instance { get; set; } = new CodeLoader();
         
         
-        public static Assembly GetHotfixAssembly()
+        private AssemblyLoadContext assemblyLoadContext;
+        
+        public void LoadHotfix()
         {
         {
             assemblyLoadContext?.Unload();
             assemblyLoadContext?.Unload();
             System.GC.Collect();
             System.GC.Collect();
@@ -16,7 +20,10 @@ namespace ET
             byte[] dllBytes = File.ReadAllBytes("./Hotfix.dll");
             byte[] dllBytes = File.ReadAllBytes("./Hotfix.dll");
             byte[] pdbBytes = File.ReadAllBytes("./Hotfix.pdb");
             byte[] pdbBytes = File.ReadAllBytes("./Hotfix.pdb");
             Assembly assembly = assemblyLoadContext.LoadFromStream(new MemoryStream(dllBytes), new MemoryStream(pdbBytes));
             Assembly assembly = assemblyLoadContext.LoadFromStream(new MemoryStream(dllBytes), new MemoryStream(pdbBytes));
-            return assembly;
+            
+            Dictionary<string, Type> types = AssemblyHelper.GetAssemblyTypes(typeof (Game).Assembly, this.GetType().Assembly, assembly);
+			
+            Game.EventSystem.Add(types);
         }
         }
     }
     }
 }
 }

+ 9 - 33
Unity/Assets/Scripts/Editor/BuildEditor/BuildAssemblieEditor.cs

@@ -13,22 +13,19 @@ namespace ET
     {
     {
         private const string CodeDir = "Assets/Bundles/Code/";
         private const string CodeDir = "Assets/Bundles/Code/";
 
 
-        [MenuItem("Tools/Build/EnableAutoBuildCodeDebug _F1")]
         public static void SetAutoBuildCode()
         public static void SetAutoBuildCode()
         {
         {
             PlayerPrefs.SetInt("AutoBuild", 1);
             PlayerPrefs.SetInt("AutoBuild", 1);
             ShowNotification("AutoBuildCode Enabled");
             ShowNotification("AutoBuildCode Enabled");
         }
         }
         
         
-        [MenuItem("Tools/Build/DisableAutoBuildCodeDebug _F2")]
         public static void CancelAutoBuildCode()
         public static void CancelAutoBuildCode()
         {
         {
             PlayerPrefs.DeleteKey("AutoBuild");
             PlayerPrefs.DeleteKey("AutoBuild");
             ShowNotification("AutoBuildCode Disabled");
             ShowNotification("AutoBuildCode Disabled");
         }
         }
 
 
-        [MenuItem("Tools/Build/BuildCodeDebug _F5")]
-        public static void BuildCodeDebug()
+        public static void BuildCode(CodeOptimization codeOptimization)
         {
         {
             BuildAssemblieEditor.BuildMuteAssembly("Code", new []
             BuildAssemblieEditor.BuildMuteAssembly("Code", new []
             {
             {
@@ -39,63 +36,42 @@ namespace ET
                 "../Codes/ModelView/Client/",
                 "../Codes/ModelView/Client/",
                 "../Codes/Hotfix/Client/",
                 "../Codes/Hotfix/Client/",
                 "../Codes/HotfixView/Client/"
                 "../Codes/HotfixView/Client/"
-            }, Array.Empty<string>(), CodeOptimization.Debug);
+            }, Array.Empty<string>(), codeOptimization);
 
 
             AfterCompiling();
             AfterCompiling();
             
             
             AssetDatabase.Refresh();
             AssetDatabase.Refresh();
         }
         }
         
         
-        [MenuItem("Tools/Build/BuildCodeRelease _F6")]
-        public static void BuildCodeRelease()
+        public static void BuildModel(CodeOptimization codeOptimization)
         {
         {
-            BuildAssemblieEditor.BuildMuteAssembly("Code", new []
-            {
-                "../Codes/Generate/Client/",
-                "../Codes/Model/Share/",
-                "../Codes/Hotfix/Share/",
-                "../Codes/Model/Client/",
-                "../Codes/ModelView/Client/",
-                "../Codes/Hotfix/Client/",
-                "../Codes/HotfixView/Client/"
-            }, Array.Empty<string>(), CodeOptimization.Release);
-
-            AfterCompiling();
-            
-            AssetDatabase.Refresh();
-        }
-        
-        [MenuItem("Tools/Build/BuildData _F7")]
-        public static void BuildData()
-        {
-            BuildAssemblieEditor.BuildMuteAssembly("Data", new []
+            BuildAssemblieEditor.BuildMuteAssembly("Model", new []
             {
             {
                 "../Codes/Generate/Client/",
                 "../Codes/Generate/Client/",
                 "../Codes/Model/Share/",
                 "../Codes/Model/Share/",
                 "../Codes/Model/Client/",
                 "../Codes/Model/Client/",
                 "../Codes/ModelView/Client/",
                 "../Codes/ModelView/Client/",
-            }, Array.Empty<string>(), CodeOptimization.Debug);
+            }, Array.Empty<string>(), codeOptimization);
         }
         }
         
         
         
         
-        [MenuItem("Tools/Build/BuildLogic _F8")]
-        public static void BuildLogic()
+        public static void BuildHotfix(CodeOptimization codeOptimization)
         {
         {
-            string[] logicFiles = Directory.GetFiles(Define.BuildOutputDir, "Logic_*");
+            string[] logicFiles = Directory.GetFiles(Define.BuildOutputDir, "Hotfix_*");
             foreach (string file in logicFiles)
             foreach (string file in logicFiles)
             {
             {
                 File.Delete(file);
                 File.Delete(file);
             }
             }
             
             
             int random = RandomHelper.RandomNumber(100000000, 999999999);
             int random = RandomHelper.RandomNumber(100000000, 999999999);
-            string logicFile = $"Logic_{random}";
+            string logicFile = $"Hotfix_{random}";
             
             
             BuildAssemblieEditor.BuildMuteAssembly(logicFile, new []
             BuildAssemblieEditor.BuildMuteAssembly(logicFile, new []
             {
             {
                 "../Codes/Hotfix/Share/",
                 "../Codes/Hotfix/Share/",
                 "../Codes/Hotfix/Client/",
                 "../Codes/Hotfix/Client/",
                 "../Codes/HotfixView/Client/"
                 "../Codes/HotfixView/Client/"
-            }, new[]{Path.Combine(Define.BuildOutputDir, "Data.dll")}, CodeOptimization.Debug);
+            }, new[]{Path.Combine(Define.BuildOutputDir, "Model.dll")}, codeOptimization);
         }
         }
 
 
         private static void BuildMuteAssembly(string assemblyName, string[] CodeDirectorys, string[] additionalReferences, CodeOptimization codeOptimization)
         private static void BuildMuteAssembly(string assemblyName, string[] CodeDirectorys, string[] additionalReferences, CodeOptimization codeOptimization)

+ 44 - 14
Unity/Assets/Scripts/Editor/BuildEditor/BuildEditor.cs

@@ -4,6 +4,7 @@ using System.IO;
 using System.Linq;
 using System.Linq;
 
 
 using UnityEditor;
 using UnityEditor;
+using UnityEditor.Compilation;
 using UnityEngine;
 using UnityEngine;
 using Object = UnityEngine.Object;
 using Object = UnityEngine.Object;
 
 
@@ -31,11 +32,11 @@ namespace ET
 		private bool clearFolder;
 		private bool clearFolder;
 		private bool isBuildExe;
 		private bool isBuildExe;
 		private bool isContainAB;
 		private bool isContainAB;
-		private BuildType buildType;
+		private CodeOptimization codeOptimization = CodeOptimization.Debug;
 		private BuildOptions buildOptions;
 		private BuildOptions buildOptions;
 		private BuildAssetBundleOptions buildAssetBundleOptions = BuildAssetBundleOptions.None;
 		private BuildAssetBundleOptions buildAssetBundleOptions = BuildAssetBundleOptions.None;
 
 
-		[MenuItem("Tools/Build Tool")]
+		[MenuItem("ET/Build Tool")]
 		public static void ShowWindow()
 		public static void ShowWindow()
 		{
 		{
 			GetWindow(typeof (BuildEditor));
 			GetWindow(typeof (BuildEditor));
@@ -64,23 +65,24 @@ namespace ET
 			this.clearFolder = EditorGUILayout.Toggle("清理资源文件夹: ", clearFolder);
 			this.clearFolder = EditorGUILayout.Toggle("清理资源文件夹: ", clearFolder);
 			this.isBuildExe = EditorGUILayout.Toggle("是否打包EXE: ", this.isBuildExe);
 			this.isBuildExe = EditorGUILayout.Toggle("是否打包EXE: ", this.isBuildExe);
 			this.isContainAB = EditorGUILayout.Toggle("是否同将资源打进EXE: ", this.isContainAB);
 			this.isContainAB = EditorGUILayout.Toggle("是否同将资源打进EXE: ", this.isContainAB);
-			this.buildType = (BuildType)EditorGUILayout.EnumPopup("BuildType: ", this.buildType);
+			this.codeOptimization = (CodeOptimization)EditorGUILayout.EnumPopup("CodeOptimization: ", this.codeOptimization);
 			EditorGUILayout.LabelField("BuildAssetBundleOptions(可多选):");
 			EditorGUILayout.LabelField("BuildAssetBundleOptions(可多选):");
 			this.buildAssetBundleOptions = (BuildAssetBundleOptions)EditorGUILayout.EnumFlagsField(this.buildAssetBundleOptions);
 			this.buildAssetBundleOptions = (BuildAssetBundleOptions)EditorGUILayout.EnumFlagsField(this.buildAssetBundleOptions);
 			
 			
-			switch (buildType)
+			switch (this.codeOptimization)
 			{
 			{
-				case BuildType.Development:
+				case CodeOptimization.None:
+				case CodeOptimization.Debug:
 					this.buildOptions = BuildOptions.Development | BuildOptions.ConnectWithProfiler;
 					this.buildOptions = BuildOptions.Development | BuildOptions.ConnectWithProfiler;
 					break;
 					break;
-				case BuildType.Release:
+				case CodeOptimization.Release:
 					this.buildOptions = BuildOptions.None;
 					this.buildOptions = BuildOptions.None;
 					break;
 					break;
 			}
 			}
 
 
 			GUILayout.Space(5);
 			GUILayout.Space(5);
-
-			if (GUILayout.Button("开始打包"))
+			
+			if (GUILayout.Button("BuildPackage"))
 			{
 			{
 				if (this.platformType == PlatformType.None)
 				if (this.platformType == PlatformType.None)
 				{
 				{
@@ -88,21 +90,49 @@ namespace ET
 					return;
 					return;
 				}
 				}
 				if (platformType != activePlatform)
 				if (platformType != activePlatform)
-                {
-                    switch (EditorUtility.DisplayDialogComplex("警告!", $"当前目标平台为{activePlatform}, 如果切换到{platformType}, 可能需要较长加载时间", "切换", "取消", "不切换"))
-                    {
+				{
+					switch (EditorUtility.DisplayDialogComplex("警告!", $"当前目标平台为{activePlatform}, 如果切换到{platformType}, 可能需要较长加载时间", "切换", "取消", "不切换"))
+					{
 						case 0:
 						case 0:
 							activePlatform = platformType;
 							activePlatform = platformType;
 							break;
 							break;
 						case 1:
 						case 1:
 							return;
 							return;
-                        case 2:
+						case 2:
 							platformType = activePlatform;
 							platformType = activePlatform;
 							break;
 							break;
-                    }
-                }
+					}
+				}
 				BuildHelper.Build(this.platformType, this.buildAssetBundleOptions, this.buildOptions, this.isBuildExe, this.isContainAB, this.clearFolder);
 				BuildHelper.Build(this.platformType, this.buildAssetBundleOptions, this.buildOptions, this.isBuildExe, this.isContainAB, this.clearFolder);
 			}
 			}
+			
+			GUILayout.Label("");
+			if (GUILayout.Button("BuildCode"))
+			{
+				BuildAssemblieEditor.BuildCode(this.codeOptimization);
+			}
+			
+			if (GUILayout.Button("BuildModel"))
+			{
+				BuildAssemblieEditor.BuildModel(this.codeOptimization);
+			}
+			
+			if (GUILayout.Button("BuildHotfix"))
+			{
+				BuildAssemblieEditor.BuildHotfix(this.codeOptimization);
+			}
+			
+			if (GUILayout.Button("ExcelExporter"))
+			{
+				ToolsEditor.ExcelExporter();
+			}
+			
+			if (GUILayout.Button("Proto2CS"))
+			{
+				ToolsEditor.Proto2CS();
+			}
+			
+
 
 
 			GUILayout.Space(5);
 			GUILayout.Space(5);
 		}
 		}

+ 0 - 14
Unity/Assets/Scripts/Editor/BuildEditor/ETBuildSettings.cs

@@ -1,14 +0,0 @@
-using UnityEditor;
-using UnityEngine;
-
-namespace ET
-{
-    public class ETBuildSettings : ScriptableObject
-    {
-        public bool clearFolder = false;
-        public bool isBuildExe = false;
-        public bool isContainAB = false;
-        public BuildType buildType = BuildType.Release;
-        public BuildAssetBundleOptions buildAssetBundleOptions = BuildAssetBundleOptions.None;
-    }
-}

+ 0 - 11
Unity/Assets/Scripts/Editor/BuildEditor/ETBuildSettings.cs.meta

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

+ 0 - 53
Unity/Assets/Scripts/Editor/BuildEditor/EditorNotification.cs

@@ -1,53 +0,0 @@
-
-#if UNITY_EDITOR
-using UnityEditor;
-using UnityEngine;
-
-namespace ET
-{
-    [InitializeOnLoad]
-    public class EditorNotification : AssetPostprocessor
-    {
-        private static bool isFocused;
-        static EditorNotification()
-        {
-            EditorApplication.update += Update;
-        }
-
-        private static void Update()
-        {
-            if (isFocused == UnityEditorInternal.InternalEditorUtility.isApplicationActive)
-            {
-                return;
-            }
-            isFocused = UnityEditorInternal.InternalEditorUtility.isApplicationActive;
-            OnEditorFocus(isFocused);
-        }
-        /// <summary>
-        /// Unity窗口聚焦状态改变回调
-        /// </summary>
-        /// <param name="focus"></param>
-        private static void OnEditorFocus(bool focus)
-        {
-            if (focus)
-            {
-                //每次切回来Unity,自动执行脚本编译
-                // Debug.Log($"编辑器激活状态:{focus}");
-                bool autoBuild = PlayerPrefs.HasKey("AutoBuild");
-                if (!autoBuild)
-                    return;
-                BuildAssemblieEditor.BuildCodeDebug();
-            }
-        }
-
-        /// <summary>
-        /// Asset下文件改变时回调
-        /// </summary>
-        private void OnPreprocessAsset()
-        {
-            //Debug.Log("Asset下文件改变时回调");
-        }
-    }
-}
-
-#endif

+ 0 - 11
Unity/Assets/Scripts/Editor/BuildEditor/EditorNotification.cs.meta

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

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

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

+ 1 - 1
Unity/Assets/Scripts/Editor/ServerCommandLineEditor/ServerCommandLineEditor.cs

@@ -15,7 +15,7 @@ namespace ET
     
     
     public class ServerCommandLineEditor: EditorWindow
     public class ServerCommandLineEditor: EditorWindow
     {
     {
-        [MenuItem("Tools/ServerTools")]
+        [MenuItem("ET/ServerTools")]
         public static void ShowWindow()
         public static void ShowWindow()
         {
         {
             GetWindow(typeof (ServerCommandLineEditor));
             GetWindow(typeof (ServerCommandLineEditor));

+ 0 - 2
Unity/Assets/Scripts/Editor/ToolEditor/ToolsEditor.cs

@@ -4,7 +4,6 @@ namespace ET
 {
 {
     public static class ToolsEditor
     public static class ToolsEditor
     {
     {
-        [MenuItem("Tools/ExcelExporter")]
         public static void ExcelExporter()
         public static void ExcelExporter()
         {
         {
 #if UNITY_EDITOR_OSX
 #if UNITY_EDITOR_OSX
@@ -15,7 +14,6 @@ namespace ET
             ShellHelper.Run($"{tools} --AppType=ExcelExporter --Console=1", "../Bin/");
             ShellHelper.Run($"{tools} --AppType=ExcelExporter --Console=1", "../Bin/");
         }
         }
         
         
-        [MenuItem("Tools/Proto2CS")]
         public static void Proto2CS()
         public static void Proto2CS()
         {
         {
 #if UNITY_EDITOR_OSX
 #if UNITY_EDITOR_OSX

+ 5 - 5
Unity/Assets/Scripts/Mono/CodeLoader.cs

@@ -48,11 +48,11 @@ namespace ET
 				}
 				}
 				case CodeMode.Reload:
 				case CodeMode.Reload:
 				{
 				{
-					byte[] assBytes = File.ReadAllBytes(Path.Combine(Define.BuildOutputDir, "Data.dll"));
-					byte[] pdbBytes = File.ReadAllBytes(Path.Combine(Define.BuildOutputDir, "Data.pdb"));
+					byte[] assBytes = File.ReadAllBytes(Path.Combine(Define.BuildOutputDir, "Model.dll"));
+					byte[] pdbBytes = File.ReadAllBytes(Path.Combine(Define.BuildOutputDir, "Model.pdb"));
 					
 					
 					assembly = Assembly.Load(assBytes, pdbBytes);
 					assembly = Assembly.Load(assBytes, pdbBytes);
-					this.LoadLogic();
+					this.LoadHotfix();
 					IStaticMethod start = new StaticMethod(assembly, "ET.Client.Entry", "Start");
 					IStaticMethod start = new StaticMethod(assembly, "ET.Client.Entry", "Start");
 					start.Run();
 					start.Run();
 					break;
 					break;
@@ -63,7 +63,7 @@ namespace ET
 		// 热重载调用下面两个方法
 		// 热重载调用下面两个方法
 		// CodeLoader.Instance.LoadLogic();
 		// CodeLoader.Instance.LoadLogic();
 		// Game.EventSystem.Load();
 		// Game.EventSystem.Load();
-		public void LoadLogic()
+		public void LoadHotfix()
 		{
 		{
 			if (this.CodeMode != CodeMode.Reload)
 			if (this.CodeMode != CodeMode.Reload)
 			{
 			{
@@ -71,7 +71,7 @@ namespace ET
 			}
 			}
 			
 			
 			// 傻屌Unity在这里搞了个傻逼优化,认为同一个路径的dll,返回的程序集就一样。所以这里每次编译都要随机名字
 			// 傻屌Unity在这里搞了个傻逼优化,认为同一个路径的dll,返回的程序集就一样。所以这里每次编译都要随机名字
-			string[] logicFiles = Directory.GetFiles(Define.BuildOutputDir, "Logic_*.dll");
+			string[] logicFiles = Directory.GetFiles(Define.BuildOutputDir, "Hotfix_*.dll");
 			if (logicFiles.Length != 1)
 			if (logicFiles.Length != 1)
 			{
 			{
 				throw new Exception("Logic dll count != 1");
 				throw new Exception("Logic dll count != 1");