Przeglądaj źródła

添加Unity编译模式,去掉ide编译模式 (#538)

XuWei 2 lat temu
rodzic
commit
ec11dee8b6
52 zmienionych plików z 611 dodań i 165 usunięć
  1. 2 1
      Unity/Assets/Resources/GlobalConfig.asset
  2. 2 10
      Unity/Assets/Scripts/Codes/Hotfix/Client/Ignore.asmdef.DISABLED
  3. 1 2
      Unity/Assets/Scripts/Codes/Hotfix/Client/Ignore.asmdef.DISABLED.meta
  4. 16 0
      Unity/Assets/Scripts/Codes/Hotfix/Server/Ignore.asmdef.DISABLED
  5. 7 0
      Unity/Assets/Scripts/Codes/Hotfix/Server/Ignore.asmdef.DISABLED.meta
  6. 3 1
      Unity/Assets/Scripts/Codes/Hotfix/Unity.Hotfix.asmdef
  7. 0 0
      Unity/Assets/Scripts/Codes/Hotfix/Unity.Hotfix.asmdef.meta
  8. 16 0
      Unity/Assets/Scripts/Codes/HotfixView/Client/Ignore.asmdef.DISABLED
  9. 7 0
      Unity/Assets/Scripts/Codes/HotfixView/Client/Ignore.asmdef.DISABLED.meta
  10. 0 0
      Unity/Assets/Scripts/Codes/HotfixView/Empty.cs
  11. 1 1
      Unity/Assets/Scripts/Codes/HotfixView/Empty.cs.meta
  12. 3 1
      Unity/Assets/Scripts/Codes/HotfixView/Unity.HotfixView.asmdef
  13. 0 0
      Unity/Assets/Scripts/Codes/HotfixView/Unity.HotfixView.asmdef.meta
  14. 16 0
      Unity/Assets/Scripts/Codes/Model/Client/Ignore.asmdef.DISABLED
  15. 7 0
      Unity/Assets/Scripts/Codes/Model/Client/Ignore.asmdef.DISABLED.meta
  16. 1 1
      Unity/Assets/Scripts/Codes/Model/Generate/Client/Ignore.asmdef
  17. 1 1
      Unity/Assets/Scripts/Codes/Model/Generate/Client/Ignore.asmdef.meta
  18. 0 7
      Unity/Assets/Scripts/Codes/Model/Generate/Client/Unity.ConfigClient.asmdef.meta
  19. 16 0
      Unity/Assets/Scripts/Codes/Model/Generate/ClientServer/Ignore.asmdef.DISABLED
  20. 7 0
      Unity/Assets/Scripts/Codes/Model/Generate/ClientServer/Ignore.asmdef.DISABLED.meta
  21. 1 1
      Unity/Assets/Scripts/Codes/Model/Generate/Server/Ignore.asmdef
  22. 0 0
      Unity/Assets/Scripts/Codes/Model/Generate/Server/Ignore.asmdef.meta
  23. 16 0
      Unity/Assets/Scripts/Codes/Model/Server/Ignore.asmdef.DISABLED
  24. 7 0
      Unity/Assets/Scripts/Codes/Model/Server/Ignore.asmdef.DISABLED.meta
  25. 3 1
      Unity/Assets/Scripts/Codes/Model/Unity.Model.asmdef
  26. 0 0
      Unity/Assets/Scripts/Codes/Model/Unity.Model.asmdef.meta
  27. 16 0
      Unity/Assets/Scripts/Codes/ModelView/Client/Ignore.asmdef.DISABLED
  28. 7 0
      Unity/Assets/Scripts/Codes/ModelView/Client/Ignore.asmdef.DISABLED.meta
  29. 0 0
      Unity/Assets/Scripts/Codes/ModelView/Empty.cs
  30. 1 1
      Unity/Assets/Scripts/Codes/ModelView/Empty.cs.meta
  31. 3 1
      Unity/Assets/Scripts/Codes/ModelView/Unity.ModelView.asmdef
  32. 0 0
      Unity/Assets/Scripts/Codes/ModelView/Unity.ModelView.asmdef.meta
  33. 1 1
      Unity/Assets/Scripts/Editor/Assembly.meta
  34. 90 0
      Unity/Assets/Scripts/Editor/Assembly/AssemblyEditor.cs
  35. 1 1
      Unity/Assets/Scripts/Editor/Assembly/AssemblyEditor.cs.meta
  36. 147 0
      Unity/Assets/Scripts/Editor/Assembly/AssemblyTool.cs
  37. 1 1
      Unity/Assets/Scripts/Editor/Assembly/AssemblyTool.cs.meta
  38. 7 112
      Unity/Assets/Scripts/Editor/AssetPostProcessor/OnGenerateCSProjectProcessor.cs
  39. 17 2
      Unity/Assets/Scripts/Editor/BuildEditor/BuildEditor.cs
  40. 1 1
      Unity/Assets/Scripts/Editor/GlobalConfigEditor.meta
  41. 40 0
      Unity/Assets/Scripts/Editor/GlobalConfigEditor/GlobalConfigEditor.cs
  42. 11 0
      Unity/Assets/Scripts/Editor/GlobalConfigEditor/GlobalConfigEditor.cs.meta
  43. 1 1
      Unity/Assets/Scripts/Editor/ToolbarExtension.meta
  44. 39 0
      Unity/Assets/Scripts/Editor/ToolbarExtension/CompileDllsToolbar.cs
  45. 11 0
      Unity/Assets/Scripts/Editor/ToolbarExtension/CompileDllsToolbar.cs.meta
  46. 5 1
      Unity/Assets/Scripts/Editor/Unity.Editor.asmdef
  47. 68 15
      Unity/Assets/Scripts/Loader/CodeLoader.cs
  48. 3 1
      Unity/Assets/Scripts/Loader/MonoBehaviour/GlobalConfig.cs
  49. 0 0
      Unity/Assets/Scripts/Model/Empty.cs
  50. 0 0
      Unity/Assets/Scripts/ModelView/Empty.cs
  51. 1 0
      Unity/Packages/manifest.json
  52. 7 0
      Unity/Packages/packages-lock.json

+ 2 - 1
Unity/Assets/Resources/GlobalConfig.asset

@@ -12,7 +12,8 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 36527db572638af47b03c805671cba75, type: 3}
   m_Name: GlobalConfig
   m_EditorClassIdentifier: 
-  CodeMode: 3
+  CodeMode: 2
+  EnableDll: 1
   BuildType: 1
   AppType: 7
   EPlayMode: 0

+ 2 - 10
Unity/Assets/Scripts/Codes/Unity.Codes.asmdef → Unity/Assets/Scripts/Codes/Hotfix/Client/Ignore.asmdef.DISABLED

@@ -1,15 +1,7 @@
 {
-    "name": "Unity.Codes",
+    "name": "Unity.Ignore.Hotfix.Client",
     "rootNamespace": "",
-    "references": [
-        "Unity.Core",
-        "Unity.ThirdParty",
-        "Unity.Loader",
-        "BetterStreamingAssets",
-        "Unity.Mathematics",
-        "MemoryPack",
-        "YooAsset"
-    ],
+    "references": [],
     "includePlatforms": [],
     "excludePlatforms": [],
     "allowUnsafeCode": false,

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

@@ -1,6 +1,5 @@
 fileFormatVersion: 2
-guid: 681e5a02ed76f44f8baebdb7aa3d496f
-folderAsset: yes
+guid: e9fd78ad5690d6145b5c4f0243a1f428
 DefaultImporter:
   externalObjects: {}
   userData: 

+ 16 - 0
Unity/Assets/Scripts/Codes/Hotfix/Server/Ignore.asmdef.DISABLED

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

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

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

+ 3 - 1
Unity/Assets/Scripts/Hotfix/Unity.Hotfix.asmdef → Unity/Assets/Scripts/Codes/Hotfix/Unity.Hotfix.asmdef

@@ -15,7 +15,9 @@
     "overrideReferences": false,
     "precompiledReferences": [],
     "autoReferenced": true,
-    "defineConstraints": [],
+    "defineConstraints": [
+        "UNITY_COMPILE || UNITY_EDITOR"
+    ],
     "versionDefines": [],
     "noEngineReferences": true
 }

+ 0 - 0
Unity/Assets/Scripts/Hotfix/Unity.Hotfix.asmdef.meta → Unity/Assets/Scripts/Codes/Hotfix/Unity.Hotfix.asmdef.meta


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

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

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

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

+ 0 - 0
Unity/Assets/Scripts/Hotfix/Empty.cs → Unity/Assets/Scripts/Codes/HotfixView/Empty.cs


+ 1 - 1
Unity/Assets/Scripts/HotfixView/Empty.cs.meta → Unity/Assets/Scripts/Codes/HotfixView/Empty.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 9ca85aa06870f4eeea5a8e41b0cec3a0
+guid: bf71441715e2a66438cf0d6bfb651847
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 3 - 1
Unity/Assets/Scripts/HotfixView/Unity.HotfixView.asmdef → Unity/Assets/Scripts/Codes/HotfixView/Unity.HotfixView.asmdef

@@ -18,7 +18,9 @@
     "overrideReferences": false,
     "precompiledReferences": [],
     "autoReferenced": true,
-    "defineConstraints": [],
+    "defineConstraints": [
+        "UNITY_COMPILE || UNITY_EDITOR"
+    ],
     "versionDefines": [],
     "noEngineReferences": false
 }

+ 0 - 0
Unity/Assets/Scripts/HotfixView/Unity.HotfixView.asmdef.meta → Unity/Assets/Scripts/Codes/HotfixView/Unity.HotfixView.asmdef.meta


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

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

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

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

+ 1 - 1
Unity/Assets/Scripts/Codes/Model/Generate/Client/Unity.ConfigClient.asmdef → Unity/Assets/Scripts/Codes/Model/Generate/Client/Ignore.asmdef

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

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

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

+ 0 - 7
Unity/Assets/Scripts/Codes/Model/Generate/Client/Unity.ConfigClient.asmdef.meta

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

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

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

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

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

+ 1 - 1
Unity/Assets/Scripts/Codes/Model/Generate/Server/Unity.ConfigServer.asmdef → Unity/Assets/Scripts/Codes/Model/Generate/Server/Ignore.asmdef

@@ -1,5 +1,5 @@
 {
-    "name": "Unity.ConfigServer",
+    "name": "Ignore.Generate.Server",
     "rootNamespace": "",
     "references": [],
     "includePlatforms": [],

+ 0 - 0
Unity/Assets/Scripts/Codes/Model/Generate/Server/Unity.ConfigServer.asmdef.meta → Unity/Assets/Scripts/Codes/Model/Generate/Server/Ignore.asmdef.meta


+ 16 - 0
Unity/Assets/Scripts/Codes/Model/Server/Ignore.asmdef.DISABLED

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

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

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

+ 3 - 1
Unity/Assets/Scripts/Model/Unity.Model.asmdef → Unity/Assets/Scripts/Codes/Model/Unity.Model.asmdef

@@ -13,7 +13,9 @@
     "overrideReferences": false,
     "precompiledReferences": [],
     "autoReferenced": true,
-    "defineConstraints": [],
+    "defineConstraints": [
+        "UNITY_COMPILE || UNITY_EDITOR"
+    ],
     "versionDefines": [],
     "noEngineReferences": true
 }

+ 0 - 0
Unity/Assets/Scripts/Model/Unity.Model.asmdef.meta → Unity/Assets/Scripts/Codes/Model/Unity.Model.asmdef.meta


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

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

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

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

+ 0 - 0
Unity/Assets/Scripts/HotfixView/Empty.cs → Unity/Assets/Scripts/Codes/ModelView/Empty.cs


+ 1 - 1
Unity/Assets/Scripts/Model/Empty.cs.meta → Unity/Assets/Scripts/Codes/ModelView/Empty.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: c9493190049ca441e930ab1eff391771
+guid: e57aa0606f847504b96056eeb2d00a1b
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 3 - 1
Unity/Assets/Scripts/ModelView/Unity.ModelView.asmdef → Unity/Assets/Scripts/Codes/ModelView/Unity.ModelView.asmdef

@@ -15,7 +15,9 @@
     "overrideReferences": false,
     "precompiledReferences": [],
     "autoReferenced": true,
-    "defineConstraints": [],
+    "defineConstraints": [
+        "UNITY_COMPILE || UNITY_EDITOR"
+    ],
     "versionDefines": [],
     "noEngineReferences": false
 }

+ 0 - 0
Unity/Assets/Scripts/ModelView/Unity.ModelView.asmdef.meta → Unity/Assets/Scripts/Codes/ModelView/Unity.ModelView.asmdef.meta


+ 1 - 1
Unity/Assets/Scripts/Model.meta → Unity/Assets/Scripts/Editor/Assembly.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: db4d00a1e3f2e45a1975bb6867baaaf1
+guid: 7e6c7dcde06ebd24c9af8eb19872c3af
 folderAsset: yes
 DefaultImporter:
   externalObjects: {}

+ 90 - 0
Unity/Assets/Scripts/Editor/Assembly/AssemblyEditor.cs

@@ -0,0 +1,90 @@
+using System.IO;
+using UnityEditor;
+using UnityEngine;
+
+namespace ET
+{
+    public class AssemblyEditor
+    {
+        [InitializeOnLoadMethod]
+        static void Initialize()
+        {
+             //删掉Library中Unity编译的dll,不然在编辑器下Assembly.Load多个dll时,dll会与Library中的dll引用错乱
+            EditorApplication.playModeStateChanged += change =>
+            {
+                GlobalConfig globalConfig = Resources.Load<GlobalConfig>("GlobalConfig");
+                if (change == PlayModeStateChange.ExitingEditMode)
+                {
+                    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);
+                                }
+
+                                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);
+                                }
+
+                                File.Move(pdbFile, pdbDisableFile);
+                            }
+                        }
+                    }
+                    else
+                    {
+                        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);
+                                }
+                            }
+
+                            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);
+                                }
+                            }
+                        }
+                    }
+                }
+            };
+        }
+    }
+}

+ 1 - 1
Unity/Assets/Scripts/ModelView/Empty.cs.meta → Unity/Assets/Scripts/Editor/Assembly/AssemblyEditor.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 9900302e15033428aab6b91c18ca9f99
+guid: dbb05701f1eccad4790c61534db54aad
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 147 - 0
Unity/Assets/Scripts/Editor/Assembly/AssemblyTool.cs

@@ -0,0 +1,147 @@
+using System.IO;
+using UnityEditor;
+using UnityEditor.Build.Player;
+using UnityEngine;
+
+namespace ET
+{
+    public class AssemblyTool
+    {
+        public static readonly string[] dllNames = new[] { "Unity.Hotfix", "Unity.HotfixView", "Unity.Model", "Unity.ModelView" };
+        
+        private static BuildTarget GetBuildTarget(PlatformType type)
+        {
+            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;
+            }
+
+            return BuildTarget.StandaloneWindows;
+        }
+
+        public static void DoCompile()
+        {
+            BuildTarget target = EditorUserBuildSettings.activeBuildTarget;
+            ScriptCompilationOptions options = EditorUserBuildSettings.development
+                    ? ScriptCompilationOptions.DevelopmentBuild
+                    : ScriptCompilationOptions.None;
+            CompileDlls(target, options);
+            CopyHotUpdateDlls();
+        }
+
+        public static void CompileDlls(PlatformType platform, ScriptCompilationOptions options = ScriptCompilationOptions.None)
+        {
+            CompileDlls(GetBuildTarget(platform), options);
+        }
+
+        public static void CompileDlls(BuildTarget target, ScriptCompilationOptions options = ScriptCompilationOptions.None)
+        {
+            Directory.CreateDirectory(Define.BuildOutputDir);
+            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
+            EditorUtility.ClearProgressBar();
+#endif
+            Debug.Log("compile finish!!!");
+        }
+
+        static void CopyHotUpdateDlls()
+        {
+            FileHelper.CleanDirectory(Define.CodeDir);
+            foreach (var 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!!!");
+        }
+
+        public static void Enable_UNITY_CLIENT()
+        {
+            DisableAsmdef("Assets/Scripts/Codes/Model/Generate/Client/Ignore.asmdef");
+            EnableAsmdef("Assets/Scripts/Codes/Model/Generate/Server/Ignore.asmdef");
+            EnableAsmdef("Assets/Scripts/Codes/Model/Generate/ClientServer/Ignore.asmdef");
+
+            DisableAsmdef("Assets/Scripts/Codes/Model/Client/Ignore.asmdef");
+            EnableAsmdef("Assets/Scripts/Codes/Model/Server/Ignore.asmdef");
+            DisableAsmdef("Assets/Scripts/Codes/Hotfix/Client/Ignore.asmdef");
+            EnableAsmdef("Assets/Scripts/Codes/Hotfix/Server/Ignore.asmdef");
+
+            DisableAsmdef("Assets/Scripts/Codes/HotfixView/Client/Ignore.asmdef");
+            DisableAsmdef("Assets/Scripts/Codes/ModelView/Client/Ignore.asmdef");
+            AssetDatabase.Refresh();
+        }
+
+        public static void Enable_UNITY_SERVER()
+        {
+            EnableAsmdef("Assets/Scripts/Codes/Model/Generate/Client/Ignore.asmdef");
+            EnableAsmdef("Assets/Scripts/Codes/Model/Generate/Server/Ignore.asmdef");
+            DisableAsmdef("Assets/Scripts/Codes/Model/Generate/ClientServer/Ignore.asmdef");
+
+            DisableAsmdef("Assets/Scripts/Codes/Model/Client/Ignore.asmdef");
+            DisableAsmdef("Assets/Scripts/Codes/Model/Server/Ignore.asmdef");
+            DisableAsmdef("Assets/Scripts/Codes/Hotfix/Client/Ignore.asmdef");
+            DisableAsmdef("Assets/Scripts/Codes/Hotfix/Server/Ignore.asmdef");
+
+            EnableAsmdef("Assets/Scripts/Codes/HotfixView/Client/Ignore.asmdef");
+            EnableAsmdef("Assets/Scripts/Codes/ModelView/Client/Ignore.asmdef");
+            AssetDatabase.Refresh();
+        }
+
+        public static void Enable_UNITY_CLIENTSERVER()
+        {
+            EnableAsmdef("Assets/Scripts/Codes/Model/Generate/Client/Ignore.asmdef");
+            EnableAsmdef("Assets/Scripts/Codes/Model/Generate/Server/Ignore.asmdef");
+            DisableAsmdef("Assets/Scripts/Codes/Model/Generate/ClientServer/Ignore.asmdef");
+
+            DisableAsmdef("Assets/Scripts/Codes/Model/Client/Ignore.asmdef");
+            DisableAsmdef("Assets/Scripts/Codes/Model/Server/Ignore.asmdef");
+            DisableAsmdef("Assets/Scripts/Codes/Hotfix/Client/Ignore.asmdef");
+            DisableAsmdef("Assets/Scripts/Codes/Hotfix/Server/Ignore.asmdef");
+
+            DisableAsmdef("Assets/Scripts/Codes/HotfixView/Client/Ignore.asmdef");
+            DisableAsmdef("Assets/Scripts/Codes/ModelView/Client/Ignore.asmdef");
+            AssetDatabase.Refresh();
+        }
+
+        static void EnableAsmdef(string asmdefFile)
+        {
+            string asmdefDisableFile = $"{asmdefFile}.DISABLED";
+            if (File.Exists(asmdefDisableFile))
+            {
+                File.Move(asmdefDisableFile, asmdefFile);
+                File.Delete(asmdefDisableFile);
+                File.Delete($"{asmdefDisableFile}.meta");
+            }
+        }
+
+        static void DisableAsmdef(string asmdefFile)
+        {
+            if (File.Exists(asmdefFile))
+            {
+                string asmdefDisableFile = $"{asmdefFile}.DISABLED";
+                File.Move(asmdefFile, asmdefDisableFile);
+                File.Delete(asmdefFile);
+                File.Delete($"{asmdefFile}.meta");
+            }
+        }
+    }
+}

+ 1 - 1
Unity/Assets/Scripts/Hotfix/Empty.cs.meta → Unity/Assets/Scripts/Editor/Assembly/AssemblyTool.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 8b43941fb93c544c6851ccb11513c2c7
+guid: 407fa0df29e1e5248b90071cd0f86599
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 7 - 112
Unity/Assets/Scripts/Editor/AssetPostProcessor/OnGenerateCSProjectProcessor.cs

@@ -11,140 +11,34 @@ namespace ET
         /// </summary>
         public static string OnGeneratedCSProject(string path, string content)
         {
-            BuildType buildType = BuildType.Debug;
-            CodeMode codeMode = CodeMode.Client;
-            GlobalConfig globalConfig = GetGlobalConfig();
-            // 初次打开工程时会加载失败, 因为此时Unity的资源数据库(AssetDatabase)还未完成初始化
-            if (globalConfig)
-            {
-                buildType = globalConfig.BuildType;
-                codeMode = globalConfig.CodeMode;
-            }
-
-            if (buildType == BuildType.Release)
-            {
-                content = content.Replace("<Optimize>false</Optimize>", "<Optimize>true</Optimize>");
-                content = content.Replace(";DEBUG;", ";");
-            }
-
             if (path.EndsWith("Unity.Core.csproj"))
             {
-                return GenerateCustomProject(content);
+                content = GenerateCustomProject(content);
             }
 
             if (path.EndsWith("Unity.ModelView.csproj"))
             {
-                string[] files = new[] { @"Assets\Scripts\Codes\ModelView\Client\**\*.cs ModelView\Client\%(RecursiveDir)%(FileName)%(Extension)", };
-                content = GenerateCustomProject(content, files);
-                content = AddCopyAfterBuild(content);
+                content = GenerateCustomProject(content);
             }
 
             if (path.EndsWith("Unity.HotfixView.csproj"))
             {
-                string[] files = new[]
-                {
-                    @"Assets\Scripts\Codes\HotfixView\Client\**\*.cs HotfixView\Client\%(RecursiveDir)%(FileName)%(Extension)",
-                };
-                content = GenerateCustomProject(content, files);
-                content = AddCopyAfterBuild(content);
+                content = GenerateCustomProject(content);
             }
 
             if (path.EndsWith("Unity.Model.csproj"))
             {
-                string[] files = { };
-                switch (codeMode)
-                {
-                    case CodeMode.Client:
-                        files = new[]
-                        {
-                            @"Assets\Scripts\Codes\Model\Client\**\*.cs Model\Client\%(RecursiveDir)%(FileName)%(Extension)",
-                            @"Assets\Scripts\Codes\Model\Share\**\*.cs Model\Share\%(RecursiveDir)%(FileName)%(Extension)",
-                            @"Assets\Scripts\Codes\Model\Generate\Client\**\*.cs Model\Generate\%(RecursiveDir)%(FileName)%(Extension)",
-                        };
-                        break;
-                    case CodeMode.ClientServer:
-                        files = new[]
-                        {
-                            @"Assets\Scripts\Codes\Model\Server\**\*.cs Model\Server\%(RecursiveDir)%(FileName)%(Extension)",
-                            @"Assets\Scripts\Codes\Model\Client\**\*.cs Model\Client\%(RecursiveDir)%(FileName)%(Extension)",
-                            @"Assets\Scripts\Codes\Model\Share\**\*.cs Model\Share\%(RecursiveDir)%(FileName)%(Extension)",
-                            @"Assets\Scripts\Codes\Model\Generate\ClientServer\**\*.cs Model\Generate\%(RecursiveDir)%(FileName)%(Extension)",
-                        };
-                        break;
-                }
-
-                content = GenerateCustomProject(content, files);
-                content = AddCopyAfterBuild(content);
+                content = GenerateCustomProject(content);
             }
 
             if (path.EndsWith("Unity.Hotfix.csproj"))
             {
-                string[] files = { };
-                switch (codeMode)
-                {
-                    case CodeMode.Client:
-                        files = new[]
-                        {
-                            @"Assets\Scripts\Codes\Hotfix\Client\**\*.cs Hotfix\Client\%(RecursiveDir)%(FileName)%(Extension)",
-                            @"Assets\Scripts\Codes\Hotfix\Share\**\*.cs Hotfix\Share\%(RecursiveDir)%(FileName)%(Extension)",
-                        };
-                        break;
-                    case CodeMode.ClientServer:
-                        files = new[]
-                        {
-                            @"Assets\Scripts\Codes\Hotfix\Client\**\*.cs Hotfix\Client\%(RecursiveDir)%(FileName)%(Extension)",
-                            @"Assets\Scripts\Codes\Hotfix\Server\**\*.cs Hotfix\Server\%(RecursiveDir)%(FileName)%(Extension)",
-                            @"Assets\Scripts\Codes\Hotfix\Share\**\*.cs Hotfix\Share\%(RecursiveDir)%(FileName)%(Extension)",
-                        };
-                        break;
-                }
-
-                content = GenerateCustomProject(content, files);
-                content = AddCopyAfterBuild(content);
-            }
-
-            string[] deleteFiles =
-            {
-                "Library/ScriptAssemblies/Unity.Model.dll", "Library/ScriptAssemblies/Unity.Hotfix.dll",
-                "Library/ScriptAssemblies/Unity.Model.pdb", "Library/ScriptAssemblies/Unity.Hotfix.pdb",
-                "Library/ScriptAssemblies/Unity.ModelView.dll", "Library/ScriptAssemblies/Unity.HotfixView.dll",
-                "Library/ScriptAssemblies/Unity.ModelView.pdb", "Library/ScriptAssemblies/Unity.HotfixView.pdb",
-            };
-
-            foreach (string file in deleteFiles)
-            {
-                if (File.Exists(file))
-                {
-                    File.Delete(file);
-                }
+                content = GenerateCustomProject(content);
             }
 
             return content;
         }
 
-        /// <summary>
-        /// 编译dll文件后额外复制的目录配置
-        /// </summary>
-        private static string AddCopyAfterBuild(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");
-            return content;
-        }
-
-        /// <summary>
-        /// 获取全局配置
-        /// </summary>
-        private static GlobalConfig GetGlobalConfig()
-        {
-            return AssetDatabase.LoadAssetAtPath<GlobalConfig>("Assets/Resources/GlobalConfig.asset");
-        }
-
         /// <summary>
         /// 自定义C#项目配置
         /// 参考链接:
@@ -204,4 +98,5 @@ namespace ET
             return sw.GetStringBuilder().ToString();
         }
     }
-}
+}
+

+ 17 - 2
Unity/Assets/Scripts/Editor/BuildEditor/BuildEditor.cs

@@ -134,8 +134,23 @@ namespace ET
                 this.globalConfig.CodeMode = codeMode;
                 EditorUtility.SetDirty(this.globalConfig);
                 AssetDatabase.SaveAssets();
-                
-                BuildHelper.ReGenerateProjectFiles();
+                switch (codeMode)
+                {
+                    case CodeMode.Client:
+                        AssemblyTool.Enable_UNITY_CLIENT();
+                        break;
+                    case CodeMode.Server:
+                        AssemblyTool.Enable_UNITY_SERVER();
+                        break;
+                    case CodeMode.ClientServer:
+                        AssemblyTool.Enable_UNITY_CLIENTSERVER();
+                        break;
+                }
+            }
+            
+            if(GUILayout.Button("Compile Dlls"))
+            {
+                AssemblyTool.CompileDlls(this.platformType);
             }
 
             EPlayMode ePlayMode = (EPlayMode)EditorGUILayout.EnumPopup("EPlayMode: ", this.globalConfig.EPlayMode);

+ 1 - 1
Unity/Assets/Scripts/ModelView.meta → Unity/Assets/Scripts/Editor/GlobalConfigEditor.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: fffdde6f4f8bb4bb08e08a644bec82a4
+guid: 10ce5e5130790b9468addf1a602cf8f0
 folderAsset: yes
 DefaultImporter:
   externalObjects: {}

+ 40 - 0
Unity/Assets/Scripts/Editor/GlobalConfigEditor/GlobalConfigEditor.cs

@@ -0,0 +1,40 @@
+using System;
+using UnityEditor;
+
+namespace ET
+{
+    [CustomEditor(typeof(GlobalConfig))]
+    public class GlobalConfigEditor : Editor
+    {
+        private CodeMode m_CurCodeMode;
+
+        private void OnEnable()
+        {
+            GlobalConfig globalConfig = (GlobalConfig)this.target;
+            m_CurCodeMode = globalConfig.CodeMode;
+        }
+
+        public override void OnInspectorGUI()
+        {
+            base.OnInspectorGUI();
+            GlobalConfig globalConfig = (GlobalConfig)this.target;
+            if (m_CurCodeMode != globalConfig.CodeMode)
+            {
+                m_CurCodeMode = globalConfig.CodeMode;
+                this.serializedObject.Update();
+                switch (globalConfig.CodeMode)
+                {
+                    case CodeMode.Client:
+                        AssemblyTool.Enable_UNITY_CLIENT();
+                        break;
+                    case CodeMode.Server:
+                        AssemblyTool.Enable_UNITY_SERVER();
+                        break;
+                    case CodeMode.ClientServer:
+                        AssemblyTool.Enable_UNITY_CLIENTSERVER();
+                        break;
+                }
+            }
+        }
+    }
+}

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

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

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

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

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

@@ -0,0 +1,39 @@
+using ToolbarExtension;
+using UnityEditor;
+using UnityEngine;
+
+namespace ET
+{
+    public class CompileDllToolbar
+    {
+        private static readonly GUIContent s_BuildReloadHotfixButtonGUIContent = new GUIContent("Reload", "Compile And Reload ET.Hotfix Dll When Playing.");
+        private static readonly GUIContent s_BuildHotfixModelButtonGUIContent = new GUIContent("Compile", "Compile All ET Dll.");
+
+        [Toolbar(OnGUISide.Left, 0)]
+        static void OnToolbarGUI()
+        {
+            EditorGUI.BeginDisabledGroup(!Application.isPlaying);
+            {
+                if (GUILayout.Button(s_BuildReloadHotfixButtonGUIContent))
+                {
+                    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(s_BuildHotfixModelButtonGUIContent))
+            {
+                AssemblyTool.DoCompile();
+                Debug.Log("compile success!");
+            }
+        }
+    }
+}

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

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

+ 5 - 1
Unity/Assets/Scripts/Editor/Unity.Editor.asmdef

@@ -9,7 +9,11 @@
         "HybridCLR.Editor",
         "YooAsset",
         "Unity.Mathematics",
-        "Unity.Codes"
+        "Unity.Model",
+        "Unity.ModelView",
+        "Unity.Hotfix",
+        "Unity.HotfixView",
+        "ToolbarExtension.Editor"
     ],
     "includePlatforms": [
         "Editor"

+ 68 - 15
Unity/Assets/Scripts/Loader/CodeLoader.cs

@@ -14,9 +14,11 @@ namespace ET
 
         private Dictionary<string, TextAsset> dlls;
         private Dictionary<string, TextAsset> aotDlls;
+        private bool enableDll;
 
         public void Awake()
         {
+            this.enableDll = Resources.Load<GlobalConfig>("GlobalConfig").EnableDll;
         }
 
         public async ETTask DownloadAsync()
@@ -57,15 +59,38 @@ namespace ET
             }
             else
             {
-                modelAssBytes = File.ReadAllBytes(Path.Combine(Define.CodeDir, "Unity.Model.dll.bytes"));
-                modelPdbBytes = File.ReadAllBytes(Path.Combine(Define.CodeDir, "Unity.Model.pdb.bytes"));
-                modelViewAssBytes = File.ReadAllBytes(Path.Combine(Define.CodeDir, "Unity.ModelView.dll.bytes"));
-                modelViewPdbBytes = File.ReadAllBytes(Path.Combine(Define.CodeDir, "Unity.ModelView.pdb.bytes"));
-            }
-
-            this.modelAssembly = Assembly.Load(modelAssBytes, modelPdbBytes);
-            this.modelViewAssembly = Assembly.Load(modelViewAssBytes, modelViewPdbBytes);
+                if (this.enableDll)
+                {
+                    modelAssBytes = File.ReadAllBytes(Path.Combine(Define.CodeDir, "Unity.Model.dll.bytes"));
+                    modelPdbBytes = File.ReadAllBytes(Path.Combine(Define.CodeDir, "Unity.Model.pdb.bytes"));
+                    modelViewAssBytes = File.ReadAllBytes(Path.Combine(Define.CodeDir, "Unity.ModelView.dll.bytes"));
+                    modelViewPdbBytes = File.ReadAllBytes(Path.Combine(Define.CodeDir, "Unity.ModelView.pdb.bytes"));
+                    this.modelAssembly = Assembly.Load(modelAssBytes, modelPdbBytes);
+                    this.modelViewAssembly = Assembly.Load(modelViewAssBytes, modelViewPdbBytes);
+                }
+                else
+                {
+                    Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
+                    foreach (Assembly ass in assemblies)
+                    {
+                        string name = ass.GetName().Name;
+                        if (name == "Unity.Model")
+                        {
+                            this.modelAssembly = ass;
+                        }
+                        else if (name == "Unity.ModelView")
+                        {
+                            this.modelViewAssembly = ass;
+                        }
 
+                        if (this.modelAssembly != null && this.modelViewAssembly != null)
+                        {
+                            break;
+                        }
+                    }
+                }
+            }
+            
             (Assembly hotfixAssembly, Assembly hotfixViewAssembly) = this.LoadHotfix();
 
             World.Instance.AddSingleton<CodeTypes, Assembly[]>(new[]
@@ -84,6 +109,8 @@ namespace ET
             byte[] hotfixPdbBytes;
             byte[] hotfixViewAssBytes;
             byte[] hotfixViewPdbBytes;
+            Assembly hotfixAssembly = null;
+            Assembly hotfixViewAssembly = null;
             if (!Define.IsEditor)
             {
                 hotfixAssBytes = this.dlls["Unity.Hotfix.dll"].bytes;
@@ -95,17 +122,43 @@ namespace ET
                 //hotfixPdbBytes = File.ReadAllBytes(Path.Combine(Define.CodeDir, "Unity.Hotfix.pdb.bytes"));
                 //hotfixViewAssBytes = File.ReadAllBytes(Path.Combine(Define.CodeDir, "Unity.HotfixView.dll.bytes"));
                 //hotfixViewPdbBytes = File.ReadAllBytes(Path.Combine(Define.CodeDir, "Unity.HotfixView.pdb.bytes"));
+                hotfixAssembly = Assembly.Load(hotfixAssBytes, hotfixPdbBytes);
+                hotfixViewAssembly = Assembly.Load(hotfixViewAssBytes, hotfixViewPdbBytes);
             }
             else
             {
-                hotfixAssBytes = File.ReadAllBytes(Path.Combine(Define.CodeDir, "Unity.Hotfix.dll.bytes"));
-                hotfixPdbBytes = File.ReadAllBytes(Path.Combine(Define.CodeDir, "Unity.Hotfix.pdb.bytes"));
-                hotfixViewAssBytes = File.ReadAllBytes(Path.Combine(Define.CodeDir, "Unity.HotfixView.dll.bytes"));
-                hotfixViewPdbBytes = File.ReadAllBytes(Path.Combine(Define.CodeDir, "Unity.HotfixView.pdb.bytes"));
-            }
+                if (this.enableDll)
+                {
+                    hotfixAssBytes = File.ReadAllBytes(Path.Combine(Define.CodeDir, "Unity.Hotfix.dll.bytes"));
+                    hotfixPdbBytes = File.ReadAllBytes(Path.Combine(Define.CodeDir, "Unity.Hotfix.pdb.bytes"));
+                    hotfixViewAssBytes = File.ReadAllBytes(Path.Combine(Define.CodeDir, "Unity.HotfixView.dll.bytes"));
+                    hotfixViewPdbBytes = File.ReadAllBytes(Path.Combine(Define.CodeDir, "Unity.HotfixView.pdb.bytes"));
+                    hotfixAssembly = Assembly.Load(hotfixAssBytes, hotfixPdbBytes);
+                    hotfixViewAssembly = Assembly.Load(hotfixViewAssBytes, hotfixViewPdbBytes);
+                }
+                else
+                {
+                    Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
+                    foreach (Assembly ass in assemblies)
+                    {
+                        string name = ass.GetName().Name;
+                        if (name == "Unity.Hotfix")
+                        {
+                            hotfixAssembly = ass;
+                        }
+                        else if (name == "Unity.HotfixView")
+                        {
+                            hotfixViewAssembly = ass;
+                        }
 
-            Assembly hotfixAssembly = Assembly.Load(hotfixAssBytes, hotfixPdbBytes);
-            Assembly hotfixViewAssembly = Assembly.Load(hotfixViewAssBytes, hotfixViewPdbBytes);
+                        if (hotfixAssembly != null && hotfixViewAssembly != null)
+                        {
+                            break;
+                        }
+                    }
+                }
+            }
+            
             return (hotfixAssembly, hotfixViewAssembly);
         }
 

+ 3 - 1
Unity/Assets/Scripts/Loader/MonoBehaviour/GlobalConfig.cs

@@ -21,7 +21,9 @@ namespace ET
     public class GlobalConfig: ScriptableObject
     {
         public CodeMode CodeMode;
-        
+
+        public bool EnableDll;
+
         public BuildType BuildType;
 
         public AppType AppType;

+ 0 - 0
Unity/Assets/Scripts/Model/Empty.cs


+ 0 - 0
Unity/Assets/Scripts/ModelView/Empty.cs


+ 1 - 0
Unity/Packages/manifest.json

@@ -11,6 +11,7 @@
     "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",

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

@@ -183,6 +183,13 @@
         "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,