Просмотр исходного кода

抽出一个GlobalConfig的ScriptableObject

tanghai 3 лет назад
Родитель
Сommit
5b1c8b8e6e

+ 0 - 13
Codes/HotfixView/Client/Demo/UI/UILoading/LoadingBeginEvent_CreateLoadingUI.cs

@@ -1,13 +0,0 @@
-using UnityEngine;
-
-namespace ET.Client
-{
-    [Event(SceneType.Client)]
-    public class LoadingBeginEvent_CreateLoadingUI : AEvent<Scene, EventType.LoadingBegin>
-    {
-        protected override async ETTask Run(Scene scene, EventType.LoadingBegin args)
-        {
-            await UIHelper.Create(scene, UIType.UILoading, UILayer.Mid);
-        }
-    }
-}

+ 0 - 11
Codes/HotfixView/Client/Demo/UI/UILoading/LoadingFinishEvent_RemoveLoadingUI.cs

@@ -1,11 +0,0 @@
-namespace ET.Client
-{
-    [Event(SceneType.Client)]
-    public class LoadingFinishEvent_RemoveLoadingUI : AEvent<Scene, EventType.LoadingFinish>
-    {
-        protected override async ETTask Run(Scene scene, EventType.LoadingFinish args)
-        {
-            await UIHelper.Create(scene, UIType.UILoading, UILayer.Mid);
-        }
-    }
-}

+ 0 - 33
Codes/HotfixView/Client/Demo/UI/UILoading/UILoadingComponentSystem.cs

@@ -1,33 +0,0 @@
-using UnityEngine;
-using UnityEngine.UI;
-
-namespace ET.Client
-{
-    [ObjectSystem]
-    public class UiLoadingComponentAwakeSystem : AwakeSystem<UILoadingComponent>
-    {
-        protected override void Awake(UILoadingComponent self)
-        {
-            self.text = self.GetParent<UI>().GameObject.Get<GameObject>("Text").GetComponent<Text>();
-            self.StartAsync().Coroutine();
-        }
-    }
-
-    public static class UiLoadingComponentSystem
-    {
-        public static async ETTask StartAsync(this UILoadingComponent self)
-        {
-            long instanceId = self.InstanceId;
-            while (true)
-            {
-                await TimerComponent.Instance.WaitAsync(1000);
-
-                if (self.InstanceId != instanceId)
-                {
-                    return;
-                }
-            }
-        }
-    }
-
-}

+ 0 - 33
Codes/HotfixView/Client/Demo/UI/UILoading/UILoadingEvent.cs

@@ -1,33 +0,0 @@
-using System;
-using UnityEngine;
-
-namespace ET.Client
-{
-	[UIEvent(UIType.UILoading)]
-    public class UILoadingEvent: AUIEvent
-    {
-        public override async ETTask<UI> OnCreate(UIComponent uiComponent, UILayer uiLayer)
-        {
-	        try
-	        {
-		        await ETTask.CompletedTask;
-				GameObject bundleGameObject = ((GameObject)Resources.Load("KV")).Get<GameObject>(UIType.UILoading);
-				GameObject go = UnityEngine.Object.Instantiate(bundleGameObject);
-				go.layer = LayerMask.NameToLayer(LayerNames.UI);
-				UI ui = uiComponent.AddChild<UI, string, GameObject>(UIType.UILoading, go);
-
-				ui.AddComponent<UILoadingComponent>();
-				return ui;
-	        }
-	        catch (Exception e)
-	        {
-				Log.Error(e);
-		        return null;
-	        }
-		}
-
-        public override void OnRemove(UIComponent uiComponent)
-        {
-        }
-    }
-}

+ 16 - 0
Unity/Assets/Resources/GlobalConfig.asset

@@ -0,0 +1,16 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 36527db572638af47b03c805671cba75, type: 3}
+  m_Name: GlobalConfig
+  m_EditorClassIdentifier: 
+  LoadMode: 1
+  CodeMode: 1

+ 8 - 0
Unity/Assets/Resources/GlobalConfig.asset.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a60778dce43da574aa447ab3fcf5d9f7
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 0 - 51
Unity/Assets/Resources/KV.prefab

@@ -1,51 +0,0 @@
-%YAML 1.1
-%TAG !u! tag:unity3d.com,2011:
---- !u!1 &1721544207891024
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 4697655011189034}
-  - component: {fileID: 114052459199459742}
-  m_Layer: 0
-  m_Name: KV
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!4 &4697655011189034
-Transform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1721544207891024}
-  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
-  m_LocalPosition: {x: 0, y: 0, z: 0}
-  m_LocalScale: {x: 1, y: 1, z: 1}
-  m_Children: []
-  m_Father: {fileID: 0}
-  m_RootOrder: 0
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!114 &114052459199459742
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1721544207891024}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 502d8cafd6a5a0447ab1db9a24cdcb10, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  data:
-  - key: GlobalProto
-    gameObject: {fileID: 4900000, guid: 78f3a209a7b81ec46a196b52eea7e541, type: 3}
-  - key: UILoading
-    gameObject: {fileID: 1386170326414932, guid: 0deea0b3b021a714d8c54816d4ee5fbe,
-      type: 3}

+ 0 - 9
Unity/Assets/Resources/KV.prefab.meta

@@ -1,9 +0,0 @@
-fileFormatVersion: 2
-guid: 5b68b797892145f46a5553c74f060976
-timeCreated: 1510748853
-licenseType: Free
-NativeFormatImporter:
-  mainObjectFileID: 100100000
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 0 - 9
Unity/Assets/Resources/UI.meta

@@ -1,9 +0,0 @@
-fileFormatVersion: 2
-guid: a3cd1d397ab7e4a4d97fd13639af62bc
-folderAsset: yes
-timeCreated: 1510749318
-licenseType: Free
-DefaultImporter:
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 0 - 271
Unity/Assets/Resources/UI/UILoading.prefab

@@ -1,271 +0,0 @@
-%YAML 1.1
-%TAG !u! tag:unity3d.com,2011:
---- !u!1 &1173942238304288
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 224850331409010544}
-  - component: {fileID: 222360589368841156}
-  - component: {fileID: 114379447962377268}
-  m_Layer: 5
-  m_Name: Text
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &224850331409010544
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1173942238304288}
-  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
-  m_LocalPosition: {x: 0, y: 0, z: 0}
-  m_LocalScale: {x: 1, y: 1, z: 1}
-  m_Children: []
-  m_Father: {fileID: 353901466901045578}
-  m_RootOrder: 0
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0.5, y: 0.5}
-  m_AnchorMax: {x: 0.5, y: 0.5}
-  m_AnchoredPosition: {x: 713, y: 394}
-  m_SizeDelta: {x: 100, y: 40}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &222360589368841156
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1173942238304288}
-  m_CullTransparentMesh: 0
---- !u!114 &114379447962377268
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1173942238304288}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
-  m_RaycastTarget: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
-      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
-  m_FontData:
-    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
-    m_FontSize: 36
-    m_FontStyle: 0
-    m_BestFit: 0
-    m_MinSize: 3
-    m_MaxSize: 40
-    m_Alignment: 4
-    m_AlignByGeometry: 0
-    m_RichText: 1
-    m_HorizontalOverflow: 0
-    m_VerticalOverflow: 0
-    m_LineSpacing: 1
-  m_Text: 0%
---- !u!1 &1386170326414932
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 224438795553994780}
-  - component: {fileID: 3051331396555088378}
-  - component: {fileID: 3051331396555088325}
-  - component: {fileID: 3051331396555088324}
-  - component: {fileID: 114850350457908736}
-  m_Layer: 5
-  m_Name: UILoading
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &224438795553994780
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1386170326414932}
-  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
-  m_LocalPosition: {x: 0, y: 0, z: 0}
-  m_LocalScale: {x: 0, y: 0, z: 0}
-  m_Children:
-  - {fileID: 353901466901045578}
-  m_Father: {fileID: 0}
-  m_RootOrder: 0
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 0, y: 0}
-  m_Pivot: {x: 0, y: 0}
---- !u!223 &3051331396555088378
-Canvas:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1386170326414932}
-  m_Enabled: 1
-  serializedVersion: 3
-  m_RenderMode: 1
-  m_Camera: {fileID: 0}
-  m_PlaneDistance: 100
-  m_PixelPerfect: 1
-  m_ReceivesEvents: 1
-  m_OverrideSorting: 0
-  m_OverridePixelPerfect: 0
-  m_SortingBucketNormalizedSize: 0
-  m_AdditionalShaderChannelsFlag: 0
-  m_SortingLayerID: 0
-  m_SortingOrder: 1
-  m_TargetDisplay: 0
---- !u!114 &3051331396555088325
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1386170326414932}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_UiScaleMode: 1
-  m_ReferencePixelsPerUnit: 100
-  m_ScaleFactor: 1
-  m_ReferenceResolution: {x: 1920, y: 1080}
-  m_ScreenMatchMode: 0
-  m_MatchWidthOrHeight: 0.5
-  m_PhysicalUnit: 3
-  m_FallbackScreenDPI: 96
-  m_DefaultSpriteDPI: 96
-  m_DynamicPixelsPerUnit: 1
---- !u!114 &3051331396555088324
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1386170326414932}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_IgnoreReversedGraphics: 1
-  m_BlockingObjects: 0
-  m_BlockingMask:
-    serializedVersion: 2
-    m_Bits: 4294967295
---- !u!114 &114850350457908736
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1386170326414932}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 502d8cafd6a5a0447ab1db9a24cdcb10, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  data:
-  - key: Text
-    gameObject: {fileID: 1173942238304288}
---- !u!1 &572237328476073730
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 353901466901045578}
-  - component: {fileID: 352265930689500616}
-  - component: {fileID: 460403580704181360}
-  m_Layer: 5
-  m_Name: Pannel
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &353901466901045578
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 572237328476073730}
-  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
-  m_LocalPosition: {x: 0, y: 0, z: 0}
-  m_LocalScale: {x: 1.4300494, y: 1.4300494, z: 1.4300494}
-  m_Children:
-  - {fileID: 224850331409010544}
-  m_Father: {fileID: 224438795553994780}
-  m_RootOrder: 0
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: -960.2782, y: -539.8436}
-  m_SizeDelta: {x: -1920.5563, y: -1079.6873}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &352265930689500616
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 572237328476073730}
-  m_CullTransparentMesh: 0
---- !u!114 &460403580704181360
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 572237328476073730}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 0
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
-      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
-  m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
-  m_Type: 1
-  m_PreserveAspect: 0
-  m_FillCenter: 1
-  m_FillMethod: 4
-  m_FillAmount: 1
-  m_FillClockwise: 1
-  m_FillOrigin: 0
-  m_UseSpriteMesh: 0

+ 0 - 9
Unity/Assets/Resources/UI/UILoading.prefab.meta

@@ -1,9 +0,0 @@
-fileFormatVersion: 2
-guid: 0deea0b3b021a714d8c54816d4ee5fbe
-timeCreated: 1504164637
-licenseType: Free
-NativeFormatImporter:
-  mainObjectFileID: 100100000
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 1 - 1
Unity/Assets/Scenes/Init.unity

@@ -420,7 +420,7 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: ff906ecbbd0163f4094f8fa4e305d39f, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  CodeMode: 1
+  GlobalConfig: {fileID: 11400000, guid: a60778dce43da574aa447ab3fcf5d9f7, type: 2}
 --- !u!4 &575235020
 Transform:
   m_ObjectHideFlags: 0

+ 116 - 25
Unity/Assets/Scripts/Editor/BuildEditor/BuildAssemblieEditor.cs

@@ -25,37 +25,102 @@ namespace ET
             ShowNotification("AutoBuildCode Disabled");
         }
 
-        public static void BuildCode(CodeOptimization codeOptimization)
+        public static void BuildCode(CodeOptimization codeOptimization, GlobalConfig globalConfig)
         {
-            BuildAssemblieEditor.BuildMuteAssembly("Code", new []
+            List<string> codes;
+            switch (globalConfig.CodeMode)
             {
-                "../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);
+                case CodeMode.Client:
+                    codes = new List<string>()
+                    {
+                        "../Codes/Generate/Client/",
+                        "../Codes/Model/Share/",
+                        "../Codes/Hotfix/Share/",
+                        "../Codes/Model/Client/",
+                        "../Codes/ModelView/Client/",
+                        "../Codes/Hotfix/Client/",
+                        "../Codes/HotfixView/Client/"
+                    };
+                    break;
+                case CodeMode.Server:
+                    codes = new List<string>()
+                    {
+                        "../Codes/Generate/Server/",
+                        "../Codes/Model/Share/",
+                        "../Codes/Hotfix/Share/",
+                        "../Codes/Model/Server/",
+                        "../Codes/Hotfix/Server/",
+                    };
+                    break;
+                case CodeMode.ClientServer:
+                    codes = new List<string>()
+                    {
+                        "../Codes/Generate/Client/",
+                        "../Codes/Model/Share/",
+                        "../Codes/Hotfix/Share/",
+                        "../Codes/Model/Client/",
+                        "../Codes/ModelView/Client/",
+                        "../Codes/Hotfix/Client/",
+                        "../Codes/HotfixView/Client/",
+                        "../Codes/Generate/Server/",
+                        "../Codes/Model/Server/",
+                        "../Codes/Hotfix/Server/",
+                    };
+                    break;
+                default:
+                    throw new Exception("not found enum");
+            }
+
+            BuildAssemblieEditor.BuildMuteAssembly("Code", codes, Array.Empty<string>(), codeOptimization);
 
             AfterCompiling();
             
             AssetDatabase.Refresh();
         }
         
-        public static void BuildModel(CodeOptimization codeOptimization)
+        public static void BuildModel(CodeOptimization codeOptimization, GlobalConfig globalConfig)
         {
-            BuildAssemblieEditor.BuildMuteAssembly("Model", new []
+            List<string> codes;
+            
+            switch (globalConfig.CodeMode)
             {
-                "../Codes/Generate/Client/",
-                "../Codes/Model/Share/",
-                "../Codes/Model/Client/",
-                "../Codes/ModelView/Client/",
-            }, Array.Empty<string>(), codeOptimization);
+                case CodeMode.Client:
+                    codes = new List<string>()
+                    {
+                        "../Codes/Generate/Client/",
+                        "../Codes/Model/Share/",
+                        "../Codes/Model/Client/",
+                        "../Codes/ModelView/Client/",
+                    };
+                    break;
+                case CodeMode.Server:
+                    codes = new List<string>()
+                    {
+                        "../Codes/Generate/Server/",
+                        "../Codes/Model/Share/",
+                        "../Codes/Model/Server/",
+                    };
+                    break;
+                case CodeMode.ClientServer:
+                    codes = new List<string>()
+                    {
+                        "../Codes/Generate/Client/",
+                        "../Codes/Model/Share/",
+                        "../Codes/Model/Client/",
+                        "../Codes/ModelView/Client/",
+                        "../Codes/Generate/Server/",
+                        "../Codes/Model/Server/",
+                    };
+                    break;
+                default:
+                    throw new Exception("not found enum");
+            }
+            
+            BuildAssemblieEditor.BuildMuteAssembly("Model", codes, Array.Empty<string>(), codeOptimization);
         }
         
         
-        public static void BuildHotfix(CodeOptimization codeOptimization)
+        public static void BuildHotfix(CodeOptimization codeOptimization, GlobalConfig globalConfig)
         {
             string[] logicFiles = Directory.GetFiles(Define.BuildOutputDir, "Hotfix_*");
             foreach (string file in logicFiles)
@@ -66,22 +131,48 @@ namespace ET
             int random = RandomHelper.RandomNumber(100000000, 999999999);
             string logicFile = $"Hotfix_{random}";
             
-            BuildAssemblieEditor.BuildMuteAssembly(logicFile, new []
+            List<string> codes;
+            switch (globalConfig.CodeMode)
             {
-                "../Codes/Hotfix/Share/",
-                "../Codes/Hotfix/Client/",
-                "../Codes/HotfixView/Client/"
-            }, new[]{Path.Combine(Define.BuildOutputDir, "Model.dll")}, codeOptimization);
+                case CodeMode.Client:
+                    codes = new List<string>()
+                    {
+                        "../Codes/Hotfix/Share/",
+                        "../Codes/Hotfix/Client/",
+                        "../Codes/HotfixView/Client/"
+                    };
+                    break;
+                case CodeMode.Server:
+                    codes = new List<string>()
+                    {
+                        "../Codes/Hotfix/Share/",
+                        "../Codes/Hotfix/Server/",
+                    };
+                    break;
+                case CodeMode.ClientServer:
+                    codes = new List<string>()
+                    {
+                        "../Codes/Hotfix/Share/",
+                        "../Codes/Hotfix/Client/",
+                        "../Codes/HotfixView/Client/",
+                        "../Codes/Hotfix/Server/",
+                    };
+                    break;
+                default:
+                    throw new Exception("not found enum");
+            }
+            
+            BuildAssemblieEditor.BuildMuteAssembly(logicFile, codes, 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, List<string> CodeDirectorys, string[] additionalReferences, CodeOptimization codeOptimization)
         {
             if (!Directory.Exists(Define.BuildOutputDir))
             {
                 Directory.CreateDirectory(Define.BuildOutputDir);
             }
             List<string> scripts = new List<string>();
-            for (int i = 0; i < CodeDirectorys.Length; i++)
+            for (int i = 0; i < CodeDirectorys.Count; i++)
             {
                 DirectoryInfo dti = new DirectoryInfo(CodeDirectorys[i]);
                 FileInfo[] fileInfos = dti.GetFiles("*.cs", System.IO.SearchOption.AllDirectories);

+ 6 - 3
Unity/Assets/Scripts/Editor/BuildEditor/BuildEditor.cs

@@ -109,17 +109,20 @@ namespace ET
 			GUILayout.Label("");
 			if (GUILayout.Button("BuildCode"))
 			{
-				BuildAssemblieEditor.BuildCode(this.codeOptimization);
+				GlobalConfig globalConfig = Resources.Load<GlobalConfig>("GlobalConfig");
+				BuildAssemblieEditor.BuildCode(this.codeOptimization, globalConfig);
 			}
 			
 			if (GUILayout.Button("BuildModel"))
 			{
-				BuildAssemblieEditor.BuildModel(this.codeOptimization);
+				GlobalConfig globalConfig = Resources.Load<GlobalConfig>("GlobalConfig");
+				BuildAssemblieEditor.BuildModel(this.codeOptimization, globalConfig);
 			}
 			
 			if (GUILayout.Button("BuildHotfix"))
 			{
-				BuildAssemblieEditor.BuildHotfix(this.codeOptimization);
+				GlobalConfig globalConfig = Resources.Load<GlobalConfig>("GlobalConfig");
+				BuildAssemblieEditor.BuildHotfix(this.codeOptimization, globalConfig);
 			}
 			
 			if (GUILayout.Button("ExcelExporter"))

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

@@ -15,8 +15,8 @@ namespace ET
 		public Action OnApplicationQuit;
 
 		private Assembly assembly;
-		
-		public CodeMode CodeMode { get; set; }
+
+		public GlobalConfig GlobalConfig;
 
 		private CodeLoader()
 		{
@@ -28,9 +28,9 @@ namespace ET
 		
 		public void Start()
 		{
-			switch (this.CodeMode)
+			switch (this.GlobalConfig.LoadMode)
 			{
-				case CodeMode.Mono:
+				case LoadMode.Mono:
 				{
 					Dictionary<string, UnityEngine.Object> dictionary = AssetsBundleHelper.LoadBundle("code.unity3d");
 					byte[] assBytes = ((TextAsset)dictionary["Code.dll"]).bytes;
@@ -46,7 +46,7 @@ namespace ET
 					start.Run();
 					break;
 				}
-				case CodeMode.Reload:
+				case LoadMode.Reload:
 				{
 					byte[] assBytes = File.ReadAllBytes(Path.Combine(Define.BuildOutputDir, "Model.dll"));
 					byte[] pdbBytes = File.ReadAllBytes(Path.Combine(Define.BuildOutputDir, "Model.pdb"));
@@ -65,7 +65,7 @@ namespace ET
 		// Game.EventSystem.Load();
 		public void LoadHotfix()
 		{
-			if (this.CodeMode != CodeMode.Reload)
+			if (this.GlobalConfig.LoadMode != LoadMode.Reload)
 			{
 				throw new Exception("CodeMode != Reload!");
 			}

+ 26 - 0
Unity/Assets/Scripts/Mono/MonoBehaviour/GlobalConfig.cs

@@ -0,0 +1,26 @@
+using UnityEngine;
+
+namespace ET
+{
+    // 1 mono模式 2 mono热重载模式
+    public enum LoadMode
+    {
+        Mono = 1,
+        Reload = 2,
+    }
+
+    public enum CodeMode
+    {
+        Client = 1,
+        Server = 2,
+        ClientServer = 3,
+    }
+    
+    [CreateAssetMenu(menuName = "ET/CreateGlobalConfig", fileName = "GlobalConfig", order = 0)]
+    public class GlobalConfig: ScriptableObject
+    {
+        public LoadMode LoadMode;
+
+        public CodeMode CodeMode;
+    }
+}

+ 11 - 0
Unity/Assets/Scripts/Mono/MonoBehaviour/GlobalConfig.cs.meta

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

+ 2 - 9
Unity/Assets/Scripts/Mono/MonoBehaviour/Init.cs

@@ -3,22 +3,15 @@ using UnityEngine;
 
 namespace ET
 {
-	// 1 mono模式 2 mono热重载模式
-	public enum CodeMode
-	{
-		Mono = 1,
-		Reload = 2,
-	}
-	
 	public class Init: MonoBehaviour
 	{
-		public CodeMode CodeMode = CodeMode.Mono;
+		public GlobalConfig GlobalConfig;
 		
 		private void Awake()
 		{
 			DontDestroyOnLoad(gameObject);
 
-			CodeLoader.Instance.CodeMode = this.CodeMode;
+			CodeLoader.Instance.GlobalConfig = this.GlobalConfig;
 		}
 
 		private void Start()