Переглянути джерело

修改EventSystem.Publish为0 gc版本,降低gc卡顿

大爷 1 рік тому
батько
коміт
abf7002291
49 змінених файлів з 310 додано та 332 видалено
  1. 2 2
      DotNet/Hotfix/Module/Message/NetInnerComponentSystem.cs
  2. 2 2
      DotNet/Hotfix/Module/Message/NetServerComponentSystem.cs
  3. 3 3
      DotNet/Hotfix/Scenes/EntryEvent2_InitServer.cs
  4. 3 3
      DotNet/Hotfix/Scenes/EntryLoadCfg_Server.cs
  5. 4 4
      DotNet/Hotfix/Session/NetInnerComponentOnReadEvent.cs
  6. 4 4
      DotNet/Hotfix/Session/NetServerComponentOnReadEvent.cs
  7. 9 2
      DotNet/Model/Module/Message/NetInnerComponent.cs
  8. 9 2
      DotNet/Model/Module/Message/NetServerComponent.cs
  9. 3 3
      Unity/Assets/Scripts/Codes/Hotfix/Client/EntryEvent2_InitClient.cs
  10. 10 2
      Unity/Assets/Scripts/Codes/Hotfix/Client/Login/LoginHelper.cs
  11. 2 2
      Unity/Assets/Scripts/Codes/Hotfix/Client/Module/Message/NetClientComponentSystem.cs
  12. 1 1
      Unity/Assets/Scripts/Codes/Hotfix/Client/Scene/SceneChangeHelper.cs
  13. 2 4
      Unity/Assets/Scripts/Codes/Hotfix/Client/Scene/SceneFactory.cs
  14. 4 4
      Unity/Assets/Scripts/Codes/Hotfix/Client/Session/NetClientComponentOnReadEvent.cs
  15. 1 2
      Unity/Assets/Scripts/Codes/Hotfix/Client/battle/BattleMgr.cs
  16. 3 2
      Unity/Assets/Scripts/Codes/Hotfix/Client/battle/BattleMgr_Cmd.cs
  17. 9 7
      Unity/Assets/Scripts/Codes/Hotfix/Client/battle/unit/BattleActor.cs
  18. 6 7
      Unity/Assets/Scripts/Codes/Hotfix/Client/battle/unit/BattleObject.cs
  19. 4 4
      Unity/Assets/Scripts/Codes/Hotfix/Client/battle/unit/BattleUnit.cs
  20. 3 3
      Unity/Assets/Scripts/Codes/Hotfix/Share/Init/EntryEvent1_InitShare.cs
  21. 2 2
      Unity/Assets/Scripts/Codes/HotfixView/Client/Battle/GameoverHanler.cs
  22. 8 9
      Unity/Assets/Scripts/Codes/HotfixView/Client/Camera/CameraMgr.cs
  23. 3 2
      Unity/Assets/Scripts/Codes/HotfixView/Client/Effect/BuffEffectMgr.cs
  24. 4 3
      Unity/Assets/Scripts/Codes/HotfixView/Client/Effect/EffectMgr.cs
  25. 9 8
      Unity/Assets/Scripts/Codes/HotfixView/Client/EntryEvent3_InitClient.cs
  26. 3 3
      Unity/Assets/Scripts/Codes/HotfixView/Client/EntryLoadCfg_Client.cs
  27. 13 8
      Unity/Assets/Scripts/Codes/HotfixView/Client/Global/GlobalViewMgr.cs
  28. 7 4
      Unity/Assets/Scripts/Codes/HotfixView/Client/Scene/AfterCreateCurrentScene_AddComponent.cs
  29. 7 7
      Unity/Assets/Scripts/Codes/HotfixView/Client/Scene/GameObjectPool.cs
  30. 14 14
      Unity/Assets/Scripts/Codes/HotfixView/Client/Scene/SceneChangeStart_AddComponent.cs
  31. 3 2
      Unity/Assets/Scripts/Codes/HotfixView/Client/Sound/SoundManager.cs
  32. 19 17
      Unity/Assets/Scripts/Codes/HotfixView/Client/UI/HUD/SceneChangeFinishEvent_CreateHUD.cs
  33. 1 1
      Unity/Assets/Scripts/Codes/HotfixView/Client/UI/UILobby/LoginFinish_CreateLobbyUI.cs
  34. 11 10
      Unity/Assets/Scripts/Codes/HotfixView/Client/UI/UILogin/AppStartInitFinish_CreateLoginUI.cs
  35. 3 2
      Unity/Assets/Scripts/Codes/HotfixView/Client/UI/UILogin/LoginFinish_RemoveLoginUI.cs
  36. 3 2
      Unity/Assets/Scripts/Codes/HotfixView/Client/Unit/OnChangeModelEvent.cs
  37. 4 3
      Unity/Assets/Scripts/Codes/HotfixView/Client/Unit/OnDestroyZoneObject.cs
  38. 4 3
      Unity/Assets/Scripts/Codes/HotfixView/Client/Unit/OnNewZoneObject.cs
  39. 7 5
      Unity/Assets/Scripts/Codes/HotfixView/Client/Unit/UnitRenderSystem.cs
  40. 66 16
      Unity/Assets/Scripts/Codes/Model/Client/EventTypeClient.cs
  41. 10 2
      Unity/Assets/Scripts/Codes/Model/Client/Message/NetClientComponent.cs
  42. 8 8
      Unity/Assets/Scripts/Codes/Model/Share/Entry.cs
  43. 0 17
      Unity/Assets/Scripts/Codes/Model/Share/EventType.cs
  44. 0 11
      Unity/Assets/Scripts/Codes/Model/Share/EventType.cs.meta
  45. 0 19
      Unity/Assets/Scripts/Codes/ModelView/Client/Global/GlobalViewComponent.cs
  46. 0 11
      Unity/Assets/Scripts/Codes/ModelView/Client/Global/GlobalViewComponent.cs.meta
  47. 2 2
      Unity/Assets/Scripts/Core/Module/EventSystem/EventAttribute.cs
  48. 10 52
      Unity/Assets/Scripts/Core/Module/EventSystem/EventSystem.cs
  49. 5 26
      Unity/Assets/Scripts/Core/Module/EventSystem/IEvent.cs

+ 2 - 2
DotNet/Hotfix/Module/Message/NetInnerComponentSystem.cs

@@ -83,7 +83,7 @@ namespace ET.Server
 
         public static void HandleMessage(this NetInnerComponent self, long actorId, object message)
         {
-            EventSystem.Instance.Publish(Root.Instance.Scene, new NetInnerComponentOnRead() { ActorId = actorId, Message = message });
+            EventSystem.Instance.Publish(NetInnerComponentOnRead.Clone(actorId, message));
         }
 
         private static void OnError(this NetInnerComponent self, long channelId, int error)
@@ -132,4 +132,4 @@ namespace ET.Server
             return session;
         }
     }
-}
+}

+ 2 - 2
DotNet/Hotfix/Module/Message/NetServerComponentSystem.cs

@@ -64,7 +64,7 @@ namespace ET.Server
 
             OpcodeHelper.LogMsg(self.DomainZone(), message);
 
-            EventSystem.Instance.Publish(Root.Instance.Scene, new NetServerComponentOnRead() {Session = session, Message = message});
+            EventSystem.Instance.Publish(NetServerComponentOnRead.Clone(session, message));
         }
     }
-}
+}

+ 3 - 3
DotNet/Hotfix/Scenes/EntryEvent2_InitServer.cs

@@ -4,10 +4,10 @@ using ET;
 
 namespace ET.Server
 {
-    [Event(SceneType.Process)]
-    public class EntryEvent2_InitServer: AEvent<ET.EventType.EntryEvent2>
+    [Event]
+    public class EntryEvent2_InitServer: BEvent<ET.EventType.EntryEvent2>
     {
-        protected override async ETTask Run(Scene scene, ET.EventType.EntryEvent2 args)
+        protected override async ETTask OnEvent(ET.EventType.EntryEvent2 args)
         {
             Root.Instance.Scene.AddComponent<AIDispatcherComponent>();
             // 发送普通actor消息

+ 3 - 3
DotNet/Hotfix/Scenes/EntryLoadCfg_Server.cs

@@ -2,10 +2,10 @@
 
 namespace ET
 {
-    [Event(SceneType.Process)]
-    public class EntryLoadCfg_Server : AEvent<ET.EventType.EntryLoadCfg>
+    [Event]
+    public class EntryLoadCfg_Server : BEvent<ET.EventType.EntryLoadCfg>
     {
-        protected override async ETTask Run(Scene scene, EntryLoadCfg a)
+        protected override async ETTask OnEvent(EntryLoadCfg a)
         {
             await Game.AddSingleton<ConfigComponent>().LoadAsync();
         }

+ 4 - 4
DotNet/Hotfix/Session/NetInnerComponentOnReadEvent.cs

@@ -2,11 +2,11 @@
 
 namespace ET.Server
 {
-    [Event(SceneType.Process)]
-    public class NetInnerComponentOnReadEvent: AEvent<NetInnerComponentOnRead>
+    [Event]
+    public class NetInnerComponentOnReadEvent: BEvent<NetInnerComponentOnRead>
     {
         [EnableAccessEntiyChild]
-        protected override async ETTask Run(Scene scene, NetInnerComponentOnRead args)
+        protected override async ETTask OnEvent(NetInnerComponentOnRead args)
         {
             try
             {
@@ -138,4 +138,4 @@ namespace ET.Server
             }
         }
     }
-}
+}

+ 4 - 4
DotNet/Hotfix/Session/NetServerComponentOnReadEvent.cs

@@ -1,9 +1,9 @@
 namespace ET.Server
 {
-    [Event(SceneType.Process)]
-    public class NetServerComponentOnReadEvent: AEvent<NetServerComponentOnRead>
+    [Event]
+    public class NetServerComponentOnReadEvent: BEvent<NetServerComponentOnRead>
     {
-        protected override async ETTask Run(Scene scene, NetServerComponentOnRead args)
+        protected override async ETTask OnEvent(NetServerComponentOnRead args)
         {
             Session session = args.Session;
             object message = args.Message;
@@ -55,4 +55,4 @@
             }
         }
     }
-}
+}

+ 9 - 2
DotNet/Model/Module/Message/NetInnerComponent.cs

@@ -16,10 +16,17 @@ namespace ET.Server
         }
     }
     
-    public struct NetInnerComponentOnRead
+    public class NetInnerComponentOnRead
     {
         public long ActorId;
         public object Message;
+        public static NetInnerComponentOnRead Static = new();
+        public static NetInnerComponentOnRead Clone(long id, object message)
+        {
+            Static.ActorId = id;
+            Static.Message = message;
+            return Static;
+        }
     }
     
     [ComponentOf(typeof(Scene))]
@@ -32,4 +39,4 @@ namespace ET.Server
         [StaticField]
         public static NetInnerComponent Instance;
     }
-}
+}

+ 9 - 2
DotNet/Model/Module/Message/NetServerComponent.cs

@@ -2,10 +2,17 @@
 
 namespace ET.Server
 {
-    public struct NetServerComponentOnRead
+    public class NetServerComponentOnRead
     {
         public Session Session;
         public object Message;
+        public static NetServerComponentOnRead Static = new();
+        public static NetServerComponentOnRead Clone(Session s, object o)
+        {
+            Static.Session = s;
+            Static.Message = o;
+            return Static;
+        }
     }
     
     [ComponentOf(typeof(Scene))]
@@ -13,4 +20,4 @@ namespace ET.Server
     {
         public int ServiceId;
     }
-}
+}

+ 3 - 3
Unity/Assets/Scripts/Codes/Hotfix/Client/EntryEvent2_InitClient.cs

@@ -1,9 +1,9 @@
 namespace ET.Client
 {
-    [Event(SceneType.Process)]
-    public class EntryEvent2_InitClient : AEvent<ET.EventType.EntryEvent2>
+    [Event]
+    public class EntryEvent2_InitClient : BEvent<ET.EventType.EntryEvent2>
     {
-        protected override async ETTask Run(Scene scene, ET.EventType.EntryEvent2 args)
+        protected override async ETTask OnEvent(ET.EventType.EntryEvent2 args)
         {
             Game.AddSingleton<GameSetting>();
 

+ 10 - 2
Unity/Assets/Scripts/Codes/Hotfix/Client/Login/LoginHelper.cs

@@ -6,8 +6,16 @@ namespace ET.Client
 {
     public static class LoginHelper
     {
-        public static async ETTask<int> Login(Scene clientScene, string ip, int port, string account, string password)
+        public static async ETTask<int> Login(string ip, int port)
         {
+            string account = "111";
+            string password = "111";
+            Scene clientScene = ClientSceneManagerComponent.Instance.Get( 1 );
+            if( clientScene == null )
+            {
+                Log.Error( "Not found client scene" );
+                return 0;
+            }
             try
             {
                 // 创建一个ETModel层的Session
@@ -61,7 +69,7 @@ namespace ET.Client
                 //使用简化流程直接进入游戏
                 var ret = (G2C_BindPlayer)await gateSession.Call(new C2G_BindPlayer() { PlayerId = 0 });
 
-                await EventSystem.Instance.PublishAsync(clientScene, new EventType.LoginFinish() { player = ret.Player});
+                await EventSystem.Instance.PublishWait(EventType.LoginFinish.Clone(ret.Player));
 
                 EnterMapHelper.EnterMapAsync(clientScene, ret.Player, ret.Player.instanceId).Coroutine();
             }

+ 2 - 2
Unity/Assets/Scripts/Codes/Hotfix/Client/Module/Message/NetClientComponentSystem.cs

@@ -38,7 +38,7 @@ namespace ET.Client
             
             OpcodeHelper.LogMsg(self.DomainZone(), message);
             
-            EventSystem.Instance.Publish(Root.Instance.Scene, new NetClientComponentOnRead() {Session = session, Message = message});
+            EventSystem.Instance.Publish(NetClientComponentOnRead.Clone(session, message));
         }
 
         private static void OnError(this NetClientComponent self, long channelId, int error)
@@ -81,4 +81,4 @@ namespace ET.Client
             return session;
         }
     }
-}
+}

+ 1 - 1
Unity/Assets/Scripts/Codes/Hotfix/Client/Scene/SceneChangeHelper.cs

@@ -10,7 +10,7 @@
             SceneFactory.CreateCurrentScene(sceneInstanceId, clientScene.Zone, map.MapName, currentScenesComponent);
          
             // 可以订阅这个事件中创建Loading界面
-            EventSystem.Instance.Publish(clientScene, new EventType.SceneChangeStart() { mapId = map.Id});
+            EventSystem.Instance.Publish(EventType.SceneChangeStart.Clone( map.Id ));
 
             await ETTask.CompletedTask;
         }

+ 2 - 4
Unity/Assets/Scripts/Codes/Hotfix/Client/Scene/SceneFactory.cs

@@ -12,7 +12,7 @@ namespace ET.Client
             clientScene.AddComponent<CurrentScenesComponent>();
             clientScene.AddComponent<ObjectWait>();
             clientScene.AddComponent<PlayerComponent>();
-            
+            EventSystem.Instance.Publish( EventType.AfterCreateClientScene.Clone(clientScene));
             return clientScene;
         }
         
@@ -21,10 +21,8 @@ namespace ET.Client
             Scene currentScene = EntitySceneFactory.CreateScene(id, IdGenerater.Instance.GenerateInstanceId(), zone, SceneType.Current, name, currentScenesComponent);
             currentScenesComponent.Scene = currentScene;
             
-            EventSystem.Instance.Publish(currentScene, new EventType.AfterCreateCurrentScene());
+            EventSystem.Instance.Publish( EventType.AfterCreateCurrentScene .Clone(currentScene));
             return currentScene;
         }
-        
-        
     }
 }

+ 4 - 4
Unity/Assets/Scripts/Codes/Hotfix/Client/Session/NetClientComponentOnReadEvent.cs

@@ -1,9 +1,9 @@
 namespace ET.Client
 {
-    [Event(SceneType.Process)]
-    public class NetClientComponentOnReadEvent: AEvent<NetClientComponentOnRead>
+    [Event]
+    public class NetClientComponentOnReadEvent: BEvent<NetClientComponentOnRead>
     {
-        protected override async ETTask Run(Scene scene, NetClientComponentOnRead args)
+        protected override async ETTask OnEvent(NetClientComponentOnRead args)
         {
             Session session = args.Session;
             object message = args.Message;
@@ -18,4 +18,4 @@
             await ETTask.CompletedTask;
         }
     }
-}
+}

+ 1 - 2
Unity/Assets/Scripts/Codes/Hotfix/Client/battle/BattleMgr.cs

@@ -9,7 +9,6 @@ using System;
 using System.IO;
 using System.Linq;
 using UnityEngine;
-using UnityEngine.Windows;
 using XmdsCommon.Message;
 using XmdsCommon.Plugin;
 
@@ -217,7 +216,7 @@ namespace ET
                 var unit = UnitMgr.Instance.GetUnit(e.ObjectID);
                 if(unit != null && unit is BattleUnit bunit)
                 {
-                    EventSystem.Instance.Publish<PlayAnimatorEvent>(PlayAnimatorEvent.Static.Clone(
+                    EventSystem.Instance.Publish(PlayAnimatorEvent.Clone(
     e.ObjectID, AnimatorEventType.Dead));
 
                     var launcheffect = bunit.ZUnit.Info.DeadEffect;

+ 3 - 2
Unity/Assets/Scripts/Codes/Hotfix/Client/battle/BattleMgr_Cmd.cs

@@ -10,7 +10,7 @@ using Vector2 = CommonLang.Geometry.Vector2;
 
 namespace ET
 {
-    [Event(SceneType.None)]
+    [Event]
     public class BattleFuncHandler : BEvent<BattleFunc>
     {
         private CommonLang.Geometry.Vector3 vecTmp = new CommonLang.Geometry.Vector3();
@@ -23,7 +23,7 @@ namespace ET
             EffectTimeMS = 9999999
         };
 
-        public override void OnEvent(BattleFunc a)
+        protected override async ETTask OnEvent(BattleFunc a)
         {
             Log.Debug($"Battle Func:{a.FuncIndex}");
 
@@ -137,6 +137,7 @@ namespace ET
                 case (int)KeyCode.F10:
                     break;
             }
+            await ETTask.CompletedTask;
         }
 
         //获得当前战场focus中心(当前塔位置)

+ 9 - 7
Unity/Assets/Scripts/Codes/Hotfix/Client/battle/unit/BattleActor.cs

@@ -8,28 +8,30 @@ using ProtoBuf;
 using System.ComponentModel;
 using XmdsCommon.Plugin;
 
-[Event(SceneType.None)]
+[Event]
 public class LaunchSkillEventHandler : BEvent<LaunchSkillEvent>
 {
-    public override void OnEvent(LaunchSkillEvent a)
+    protected override async ETTask OnEvent(LaunchSkillEvent a)
     {
         var actor = UnitMgr.Instance.Actor;
-        if(actor != null )
+        if (actor != null)
         {
-            var skillinfo = actor.GetSkill(a.index);
+            var skillinfo = actor.GetSkill( a.index );
             if (skillinfo != null)
             {
-                SkillMgr.Instance.LanchSkill(skillinfo.baseSkillId);
+                SkillMgr.Instance.LanchSkill( skillinfo.baseSkillId );
             }
             else
             {
-                Log.Error($"skill info not exist @index: {a.index}");
+                Log.Error( $"skill info not exist @index: {a.index}" );
             }
         }
         else
         {
-            Log.Warning("actor not exist");
+            Log.Warning( "actor not exist" );
         }
+
+        await ETTask.CompletedTask;
     }
 }
 

+ 6 - 7
Unity/Assets/Scripts/Codes/Hotfix/Client/battle/unit/BattleObject.cs

@@ -16,12 +16,12 @@ public class BattleObject
     public virtual void OnAwake(ZoneObject zo)
     {
         ZoneObject = zo;
-        EventSystem.Instance.Publish(OnNewZoneObject.Static.Clone(Id));
+        EventSystem.Instance.Publish(OnNewZoneObject.Clone(Id));
     }
 
     public virtual void OnSleep()
     {
-        EventSystem.Instance.Publish(CurrentScene, new OnDestroyZoneObject() { ObjectId = Id });
+        EventSystem.Instance.Publish( OnDestroyZoneObject.Clone(Id));
         ObjectPool.Instance.Recycle(this);
     }
 
@@ -39,13 +39,12 @@ public class BattleObject
         }
     }
 
-
-    [Event(SceneType.Current)]
-    public class AfterCreateCurrentScene_Battle : AEvent<ET.EventType.AfterCreateCurrentScene>
+    [Event]
+    public class AfterCreateCurrentScene_Battle : BEvent<AfterCreateCurrentScene>
     {
-        protected override async ETTask Run(Scene scene, ET.EventType.AfterCreateCurrentScene args)
+        protected override async ETTask OnEvent(AfterCreateCurrentScene a)
         {
-            _CurrentSceneCache = scene;
+            _CurrentSceneCache = a.scene;
             await ETTask.CompletedTask;
         }
     }

+ 4 - 4
Unity/Assets/Scripts/Codes/Hotfix/Client/battle/unit/BattleUnit.cs

@@ -75,7 +75,7 @@ public class BattleUnit : BattleObject
                 return;
             }
             var duration = action.ActionTimeArray != null ? action.ActionTimeArray[0] : actdata.TotalTimeMS;
-            EventSystem.Instance.Publish<PlayAnimatorEvent>(PlayAnimatorEvent.Static.Clone(
+            EventSystem.Instance.Publish(PlayAnimatorEvent.Clone(
                 Id,
                 AnimatorEventType.Skill,
                 actdata.ActionName,
@@ -107,7 +107,7 @@ public class BattleUnit : BattleObject
                     }
                 }
 
-                EventSystem.Instance.Publish<PlayAnimatorEvent>(PlayAnimatorEvent.Static.Clone(
+                EventSystem.Instance.Publish(PlayAnimatorEvent.Clone(
                     Id,
                     AnimatorEventType.Skill,
                     item.ActionName,
@@ -169,11 +169,11 @@ public class BattleUnit : BattleObject
     private void registerActionHandler()
     {
         actionChangeHandler.AddListener(UnitActionStatus.Idle, (_) => {
-            EventSystem.Instance.Publish<PlayAnimatorEvent>(PlayAnimatorEvent.Static.Clone(Id, AnimatorEventType.Idle));
+            EventSystem.Instance.Publish(PlayAnimatorEvent.Clone(Id, AnimatorEventType.Idle));
         });
 
         var move = actionChangeHandler.AddListener(UnitActionStatus.Move, (o) => {
-            EventSystem.Instance.Publish<PlayAnimatorEvent>(PlayAnimatorEvent.Static.Clone(Id, AnimatorEventType.Run));
+            EventSystem.Instance.Publish(PlayAnimatorEvent.Clone(Id, AnimatorEventType.Run));
         });
         actionChangeHandler.AddListener(UnitActionStatus.Chaos, move);
         actionChangeHandler.AddListener(UnitActionStatus.ServerSyncMove, move);

+ 3 - 3
Unity/Assets/Scripts/Codes/Hotfix/Share/Init/EntryEvent1_InitShare.cs

@@ -1,9 +1,9 @@
 namespace ET
 {
-    [Event(SceneType.Process)]
-    public class EntryEvent1_InitShare: AEvent<EventType.EntryEvent1>
+    [Event]
+    public class EntryEvent1_InitShare: BEvent<EventType.EntryEvent1>
     {
-        protected override async ETTask Run(Scene scene, EventType.EntryEvent1 args)
+        protected override async ETTask OnEvent(EventType.EntryEvent1 args)
         {
             Root.Instance.Scene.AddComponent<NetThreadComponent>();
             Root.Instance.Scene.AddComponent<OpcodeTypeComponent>();

+ 2 - 2
Unity/Assets/Scripts/Codes/HotfixView/Client/Battle/GameoverHanler.cs

@@ -3,10 +3,10 @@ using UnityEngine;
 
 namespace ET
 {
-    [Event(SceneType.None)]
+    [Event]
     public class GameoverEventHandler : BEvent<EventType.GameoverEvent>
     {
-        public override async void OnEvent(EventType.GameoverEvent args)
+        protected override async ETTask OnEvent(EventType.GameoverEvent args)
         {
             string title = "";
             string content = "";

+ 8 - 9
Unity/Assets/Scripts/Codes/HotfixView/Client/Camera/CameraMgr.cs

@@ -4,12 +4,11 @@ using UnityEngine;
 
 namespace ET.Client
 {
-    [FriendOfAttribute(typeof(ET.Client.GlobalViewComponent))]
     public static class CameraMgr
     {
         public static void Init()
         {
-            var camera = GlobalViewComponent.Instance.BattleCamera;
+            var camera = GlobalViewMgr.Instance.BattleCamera;
             camera.transform.SetPositionAndRotation(new Vector3(30, 45, -3.16f), Quaternion.Euler(35, 0, 0));
             camera.fieldOfView = 60;
         }
@@ -30,7 +29,7 @@ namespace ET.Client
             if (bShaking) return;
             bShaking = true;
 
-            Transform trans = GlobalViewComponent.Instance.BattleCamera.transform;
+            Transform trans = GlobalViewMgr.Instance.BattleCamera.transform;
             var savePos = trans.localPosition;
             Tweener tweener = trans.DOShakePosition(shakeTime, shakeStength);
             tweener.OnComplete<Tweener>(() =>
@@ -47,7 +46,7 @@ namespace ET.Client
 
         public static void DragMe(Vector3 start, Vector3 end, float duration, System.Action endcb)
         {
-            Transform trans = GlobalViewComponent.Instance.BattleCamera.transform;
+            Transform trans = GlobalViewMgr.Instance.BattleCamera.transform;
             trans.position = start;
             var tweener = trans.DOMove(end, duration);
             tweener.OnComplete<Tweener>(() =>
@@ -57,15 +56,14 @@ namespace ET.Client
         }
     }
 
-    [Event(SceneType.None)]
-    [FriendOfAttribute(typeof(ET.Client.GlobalViewComponent))]
-    public class CameraEventHandler : BEvent<EventType.CameraEvent>
+    [Event]
+    public class CameraEventHandler : BEvent<CameraEvent>
     {
-        public override void OnEvent(CameraEvent args)
+        protected override async ETTask OnEvent(CameraEvent args)
         {
             var endpos = new Vector3(args.X, args.Y, args.Z);
             float time = (float)args.TimeMS / 1000;
-            Transform trans = GlobalViewComponent.Instance.BattleCamera.transform;
+            Transform trans = GlobalViewMgr.Instance.BattleCamera.transform;
 
             if (args.MoveSpeedSec > 0.0001 && time < 0.01)
             {
@@ -73,6 +71,7 @@ namespace ET.Client
                 time = dis / args.MoveSpeedSec;
             }
             trans.DOMove(endpos, time);
+            await ETTask.CompletedTask;
         }
     }
 

+ 3 - 2
Unity/Assets/Scripts/Codes/HotfixView/Client/Effect/BuffEffectMgr.cs

@@ -6,11 +6,11 @@ using UnityEngine;
 
 namespace ET.Client
 {
-    [Event(SceneType.None)]
+    [Event]
     [FriendOfAttribute(typeof(ET.Client.UnitRenderComponet))]
     public class BuffChangeEventHandler : BEvent<EventType.BuffChangeEvent>
     {
-        public override void OnEvent(EventType.BuffChangeEvent args)
+        protected override async ETTask OnEvent(EventType.BuffChangeEvent args)
         {
             BattleUnit unit = UnitMgr.Instance.GetUnit(args.ObjectId) as BattleUnit;
             if (unit == null)
@@ -68,6 +68,7 @@ namespace ET.Client
             }
 
             MergeBuffStatus(unit);
+            await ETTask.CompletedTask;
         }
 
         private async ETTask AddBuff(CommonAI.ZoneClient.ZoneUnit.BuffState buff, UnitRenderComponet unitRender, BattleUnit unit)

+ 4 - 3
Unity/Assets/Scripts/Codes/HotfixView/Client/Effect/EffectMgr.cs

@@ -10,11 +10,11 @@ using System;
 namespace ET.Client
 {
     
-    [Event(SceneType.None)]
+    [Event]
     public class PlayEffectEventHandler : BEvent<EventType.PlayEffectEvent>
     {
         private static Vector3 vecTemp = new();
-        public override void OnEvent(PlayEffectEvent args)
+        protected override async ETTask OnEvent(PlayEffectEvent args)
         {
             vecTemp.Set(args.Pos.X, args.Pos.Y, args.Pos.Z);
             EffectMgr.Instance.PlayEffect(args.Effect, args.HostId, vecTemp, args.Rotation).Coroutine();
@@ -24,6 +24,7 @@ namespace ET.Client
             {
                 ProcessLauncheffectTag(args.HostId, args.Effect.Tag).Coroutine();
             }
+            await ETTask.CompletedTask;
         }
 
         public async ETTask ProcessLauncheffectTag(uint objectid, string tag)
@@ -208,7 +209,7 @@ namespace ET.Client
             else
             {
                 gt.rotation = RenderUtils.UnityRotationFromBattle(0);
-                gt.parent = GlobalViewComponent.Instance.Unit;
+                gt.parent = GlobalViewMgr.Instance.Unit;
             }
 
             if (pos != Vector3.zero)

+ 9 - 8
Unity/Assets/Scripts/Codes/HotfixView/Client/EntryEvent3_InitClient.cs

@@ -1,17 +1,18 @@
-namespace ET.Client
+using ET.EventType;
+
+namespace ET.Client
 {
-    [Event(SceneType.Process)]
-    public class EntryEvent3_InitClient : AEvent<ET.EventType.EntryEvent3>
+    [Event]
+    public class EntryEvent3_InitClient : BEvent<ET.EventType.EntryEvent3>
     {
-        protected override async ETTask Run(Scene scene, ET.EventType.EntryEvent3 args)
+        protected override async ETTask OnEvent(EntryEvent3 a)
         {
-            Root.Instance.Scene.AddComponent<GlobalViewComponent>();
-
+            Game.AddSingleton<GlobalViewMgr>();
             Game.AddSingleton<EffectMgr>();
             Game.AddSingleton<SoundManager>();
 
-            Scene clientScene = await SceneFactory.CreateClientScene(1, "Game");
-            await EventSystem.Instance.PublishAsync(clientScene, new EventType.AppStartInitFinish());
+            Scene clientScene = await SceneFactory.CreateClientScene( 1, "Game" );
+            await EventSystem.Instance.PublishWait<AppStartInitFinish>();
         }
     }
 }

+ 3 - 3
Unity/Assets/Scripts/Codes/HotfixView/Client/EntryLoadCfg_Client.cs

@@ -8,10 +8,10 @@ using System.Threading.Tasks;
 
 namespace ET
 {
-    [Event(SceneType.Process)]
-    public class EntryLoadCfg_Client : AEvent<ET.EventType.EntryLoadCfg>
+    [Event]
+    public class EntryLoadCfg_Client : BEvent<ET.EventType.EntryLoadCfg>
     {
-        protected override async ETTask Run(Scene scene, EntryLoadCfg args)
+        protected override async ETTask OnEvent(EntryLoadCfg args)
         {
             Dictionary<Type, byte[]> configBytes = new Dictionary<Type, byte[]>();
 

+ 13 - 8
Unity/Assets/Scripts/Codes/HotfixView/Client/Global/GlobalViewMgr.cs

@@ -4,17 +4,22 @@ using UnityEngine;
 namespace ET.Client
 {
     [ObjectSystem]
-    public class GlobalViewAwakeSystem : AwakeSystem<GlobalViewComponent>
+    public class GlobalViewMgr : Singleton<GlobalViewMgr>, ISingletonAwake
     {
-        protected override void Awake(GlobalViewComponent self)
-        {
-            GlobalViewComponent.Instance = self;
+        //public Camera UICamera;
+        public Camera BattleCamera;
+        public Transform Global;
+        public Transform Unit { get; set; }
+        public Transform RecycleNode { get; set; }
+        public GComponent HeadbarView { get; set; }
 
-            self.Global = GameObject.Find("/Global").transform;
-            self.Unit = GameObject.Find("/Global/Unit").transform;
-            self.RecycleNode = GameObject.Find("/Global/RecycleNode").transform;
+        public void Awake()
+        {
+            Global = GameObject.Find( "/Global" ).transform;
+            Unit = GameObject.Find( "/Global/Unit" ).transform;
+            RecycleNode = GameObject.Find( "/Global/RecycleNode" ).transform;
 
-            self.BattleCamera = GameObject.Find("/Global/BattleCamera").GetComponent<Camera>();
+            BattleCamera = GameObject.Find( "/Global/BattleCamera" ).GetComponent<Camera>();
             CameraMgr.Init();
             //self.UICamera = GameObject.Find("/Global/UICamera").GetComponent<Camera>();
 

+ 7 - 4
Unity/Assets/Scripts/Codes/HotfixView/Client/Scene/AfterCreateCurrentScene_AddComponent.cs

@@ -1,10 +1,13 @@
-namespace ET.Client
+using ET.EventType;
+
+namespace ET.Client
 {
-    [Event(SceneType.Current)]
-    public class AfterCreateCurrentScene_AddComponent: AEvent<EventType.AfterCreateCurrentScene>
+    [Event]
+    public class AfterCreateCurrentScene_AddComponent: BEvent<EventType.AfterCreateCurrentScene>
     {
-        protected override async ETTask Run(Scene scene, EventType.AfterCreateCurrentScene args)
+        protected override async ETTask OnEvent(AfterCreateCurrentScene a)
         {
+            var scene = a.scene;
             scene.AddComponent<GameObjectPool>();
             scene.AddComponent<ModelViewComponent>();
             //scene.AddComponent<OperaComponent>();

+ 7 - 7
Unity/Assets/Scripts/Codes/HotfixView/Client/Scene/GameObjectPool.cs

@@ -47,7 +47,7 @@ namespace ET.Client
         {
             var handle = await YooAssetProxy.LoadAssetAsync<GameObject>(name);
             var prefab = handle.GetAssetObject<GameObject>();
-            var gameobj = UnityEngine.Object.Instantiate(prefab, GlobalViewComponent.Instance.RecycleNode, true);
+            var gameobj = UnityEngine.Object.Instantiate(prefab, GlobalViewMgr.Instance.RecycleNode, true);
             gameobj.name = name;
             RecycleObject(gameobj);
         }
@@ -300,7 +300,7 @@ namespace ET.Client
             }
             //Log.Debug($"recycle gameobject: {key}");
             go.SetActive(false);
-            go.transform.SetParent(GlobalViewComponent.Instance.RecycleNode, false);
+            go.transform.SetParent(GlobalViewMgr.Instance.RecycleNode, false);
             if (goPool.TryGetValue(key, out var golist))
             {
                 golist.Add(go);
@@ -326,11 +326,11 @@ namespace ET.Client
             {
                 goPool.Add(key, new List<GameObject>());
             }
-            Log.Warning($"not cache gameobject: ({key})");
+            //Log.Warning($"not cache gameobject: ({key})");
 
             var handle = await YooAssetProxy.LoadAssetAsync<GameObject>(key);
             var prefab = handle.GetAssetObject<GameObject>();
-            var gameobj = UnityEngine.Object.Instantiate(prefab, GlobalViewComponent.Instance.RecycleNode, true);
+            var gameobj = UnityEngine.Object.Instantiate(prefab, GlobalViewMgr.Instance.RecycleNode, true);
             gameobj.name = key;
             return gameobj;
         }
@@ -341,7 +341,7 @@ namespace ET.Client
             {
                 return ac;
             }
-            Log.Warning($"not cache audio: ({key})");
+            //Log.Warning($"not cache audio: ({key})");
 
             var handle = await YooAssetProxy.LoadAssetAsync<AudioClip>($"Sound_{key}");
             var aac = handle.GetAssetObject<AudioClip>();
@@ -359,12 +359,12 @@ namespace ET.Client
                 return ret;
             }
 
-            var root = GlobalViewComponent.Instance.HeadbarView;
+            var root = GlobalViewMgr.Instance.HeadbarView;
             if (root == null)
             {
                 //加入所有headbar的parent view
                 root = await UIHelper.Create("HeadBar", "HeadBarRoot", 0);
-                GlobalViewComponent.Instance.HeadbarView = root;
+                GlobalViewMgr.Instance.HeadbarView = root;
                 root.visible = false;
             }
 

+ 14 - 14
Unity/Assets/Scripts/Codes/HotfixView/Client/Scene/SceneChangeStart_AddComponent.cs

@@ -1,32 +1,32 @@
 using Cysharp.Threading.Tasks;
+using ET;
 using UnityEngine;
 
 namespace ET.Client
 {
-    [Event(SceneType.Client)]
-    public class SceneChangeStart_AddComponent : AEvent<EventType.SceneChangeStart>
+    [Event]
+    public class SceneChangeStart_AddComponent : BEvent<EventType.SceneChangeStart>
     {
-        protected override async ETTask Run(Scene scene, EventType.SceneChangeStart args)
+        protected override async ETTask OnEvent(EventType.SceneChangeStart args)
         {
-            UIHelper.Create("Loading").Coroutine();
+            UIHelper.Create( "Loading" ).Coroutine();
 
-            var mapInfo = MapConfigCategory.Instance.Get(args.mapId);
+            var mapInfo = MapConfigCategory.Instance.Get( args.mapId );
             var scnName = mapInfo.MapName;
-            Log.Debug($"loading scene: {scnName}.");
+            Log.Debug( $"loading scene: {scnName}." );
             // 加载场景资源 & 加载
-            var task = await YooAssetProxy.LoadSceneAsync("Scene_" + scnName);
-            Log.Debug($"scene({task.SceneObject.name}) load finished.");
+            var task = await YooAssetProxy.LoadSceneAsync( "Scene_" + scnName );
+            Log.Debug( $"scene({task.SceneObject.name}) load finished." );
 
-            await TimerComponent.Instance.WaitAsync(1000);
-            UIHelper.Remove("Lobby");
-            UIHelper.SetVisible("Loading", false);
+            UIHelper.Remove( "Lobby" );
+            UIHelper.SetVisible( "Loading", false );
 
-            await GameObjectPool.Instance.CacheSceneObject(mapInfo.Id);
-            Log.Debug($"cache scene object end.");
+            await GameObjectPool.Instance.CacheSceneObject( mapInfo.Id );
+            Log.Debug( $"cache scene object end." );
 
             // 通知等待场景切换的协程
             EventSystem.Instance.Publish<EventType.SceneLoadFinish>();
-            scene.GetComponent<ObjectWait>().Notify(new Wait_SceneChangeFinish());
+            PlayerComponent.Instance.ClientScene().GetComponent<ObjectWait>().Notify( new Wait_SceneChangeFinish() );
         }
     }
 }

+ 3 - 2
Unity/Assets/Scripts/Codes/HotfixView/Client/Sound/SoundManager.cs

@@ -6,10 +6,10 @@ using Mono;
 using System.Text.RegularExpressions;
 using UnityEngine;
 
-[Event(SceneType.None)]
+[Event]
 public class PlayBGMHandler : BEvent<ET.EventType.PlayBgm>
 {
-    public override void OnEvent(PlayBgm args)
+    protected override async ETTask OnEvent(PlayBgm args)
     {
         if (args.Play)
         {
@@ -19,6 +19,7 @@ public class PlayBGMHandler : BEvent<ET.EventType.PlayBgm>
         {
             SoundManager.Instance.StopBgm();
         }
+        await ETTask.CompletedTask;
     }
 }
 

+ 19 - 17
Unity/Assets/Scripts/Codes/HotfixView/Client/UI/HUD/SceneChangeFinishEvent_CreateHUD.cs

@@ -3,24 +3,20 @@ using FairyGUI;
 
 namespace ET.Client
 {
-    [Event(SceneType.Client)]
+    [Event]
     public class SceneChangeFinishEvent_CreateUIHelp : BEvent<SceneLoadFinish>
     {
-        public override void OnEvent(SceneLoadFinish a)
+        protected override async ETTask OnEvent(SceneLoadFinish a)
         {
-            asyncTask().Coroutine();
-        }
-        private async ETTask asyncTask()
-        {
-            var view = await UIHelper.Create("HUD");
-            HUDMgr.InitView(view);
+            var view = await UIHelper.Create( "HUD" );
+            HUDMgr.InitView( view );
         }
     }
 
-    [Event(SceneType.None)]
+    [Event]
     public class SkillChangeEventHandler : BEvent<SkillChangeEvent>
     {
-        public override void OnEvent(SkillChangeEvent a)
+        protected override async ETTask OnEvent(SkillChangeEvent a)
         {
             Log.Debug("actor's skill changed.");
             /*var view = UIHelper.GetUI("HUD") as GComponent;
@@ -28,10 +24,11 @@ namespace ET.Client
             {
                 HUDMgr.InitView(view);
             }*/
+            await ETTask.CompletedTask;
         }
     }
 
-    [Event(SceneType.None)]
+    [Event]
     public class HPRefreshEventHandler : BEvent<HPRefresh>
     {
         GProgressBar progressBar1;
@@ -39,7 +36,7 @@ namespace ET.Client
         GTextField txt1;
         GTextField txt2;
 
-        public override void OnEvent(HPRefresh a)
+        protected override async ETTask OnEvent(HPRefresh a)
         {
             GProgressBar progress = null;
             GTextField txt = null;
@@ -69,13 +66,15 @@ namespace ET.Client
             progress.visible = true;
             progress.value = a.Progress;
             txt.text = a.Progress.ToString("F2") + "%";
+
+            await ETTask.CompletedTask;
         }
     }
 
-    [Event(SceneType.None)]
+    [Event]
     public class RankEventHandler : BEvent<RankChangeEvent>
     {
-        public override void OnEvent(RankChangeEvent a)
+        protected override async ETTask OnEvent(RankChangeEvent a)
         {
             var view = UIHelper.GetUI("HUD") as GComponent;
             if (view == null) return;
@@ -108,14 +107,16 @@ namespace ET.Client
                     }
                 }
             }
+
+            await ETTask.CompletedTask;
         }
     }
 
-    [Event(SceneType.None)]
+    [Event]
     public class BattleMsgHandler : BEvent<BattleMsgEvent>
     {
         int CurIndex = 0;
-        public override void OnEvent(BattleMsgEvent a)
+        protected override async ETTask OnEvent(BattleMsgEvent a)
         {
             var view = UIHelper.GetUI("HUD") as GComponent;
             var list = view.GetChild("InfoList").asList;
@@ -130,6 +131,7 @@ namespace ET.Client
             txt.text = a.msg;
 
             ++CurIndex;
+            await ETTask.CompletedTask;
         }
     }
 
@@ -171,7 +173,7 @@ namespace ET.Client
                 {
                     if(index == 1)
                     {
-                        GlobalViewComponent.Instance.HeadbarView.visible = !GlobalViewComponent.Instance.HeadbarView.visible;
+                        GlobalViewMgr.Instance.HeadbarView.visible = !GlobalViewComponent.Instance.HeadbarView.visible;
                         return;
                     }
                     EventSystem.Instance.Publish<BattleFunc>(BattleFunc.Static.Clone(index));

+ 1 - 1
Unity/Assets/Scripts/Codes/HotfixView/Client/UI/UILobby/LoginFinish_CreateLobbyUI.cs

@@ -4,7 +4,7 @@ using UnityEngine;
 
 namespace ET.Client
 {
-    //[Event(SceneType.None)]
+    //[Event]
     public class LoginFinish_CreateLobbyUI //: AEvent<EventType.LoginFinish>
     {
        /*protected override async ETTask Run(Scene scene, EventType.LoginFinish args)

+ 11 - 10
Unity/Assets/Scripts/Codes/HotfixView/Client/UI/UILogin/AppStartInitFinish_CreateLoginUI.cs

@@ -1,4 +1,5 @@
 using Cysharp.Threading.Tasks;
+using ET.EventType;
 using FairyGUI;
 using Sirenix.Utilities;
 using System;
@@ -7,20 +8,20 @@ using UnityEngine;
 
 namespace ET.Client
 {
-    [Event(SceneType.Client)]
-    public class AppStartInitFinish_CreateLoginUI : AEvent<EventType.AppStartInitFinish>
+    [Event]
+    public class AppStartInitFinish_CreateLoginUI : BEvent<EventType.AppStartInitFinish>
     {
         private string mIP;
         private int mPort;
 
-        protected override async ETTask Run(Scene scene, EventType.AppStartInitFinish args)
+        protected override async ETTask OnEvent(AppStartInitFinish a)
         {
-            var view = await UIHelper.Create("Login");
-            InitLogin(scene, view);
+            var view = await UIHelper.Create( "Login" );
+            InitLogin( view );
 
-            var preView = GRoot.inst.GetChildAt(0);
-            GRoot.inst.RemoveChild(preView, true);
-            UIPackage.RemovePackage("CheckForResUpdate");
+            var preView = GRoot.inst.GetChildAt( 0 );
+            GRoot.inst.RemoveChild( preView, true );
+            UIPackage.RemovePackage( "CheckForResUpdate" );
         }
 
         private void InitServerList(GComboBox list)
@@ -120,7 +121,7 @@ namespace ET.Client
 #endif
         }
 
-        private void InitLogin(Scene scene, GComponent view)
+        private void InitLogin(GComponent view)
         {
             var comp = view.GetChild("comp_login") as GComponent;
             var listSvr = view.GetChild("listServer").asComboBox;
@@ -145,7 +146,7 @@ namespace ET.Client
 
                 imgtips.visible = true;
                 btn.enabled = false;
-                var ret = await LoginHelper.Login(scene, mIP, mPort, "111", "111");
+                var ret = await LoginHelper.Login(mIP, mPort);
                 if (ret != ErrorCode.ERR_Success)
                 {
                     imgtips.visible = false;

+ 3 - 2
Unity/Assets/Scripts/Codes/HotfixView/Client/UI/UILogin/LoginFinish_RemoveLoginUI.cs

@@ -4,9 +4,9 @@ using Sirenix.Utilities;
 namespace ET.Client
 {
     [Event(SceneType.Client)]
-    public class LoginFinish_RemoveLoginUI : AEvent<EventType.LoginFinish>
+    public class LoginFinish_RemoveLoginUI : BEvent<EventType.LoginFinish>
     {
-        protected override async ETTask Run(Scene scene, EventType.LoginFinish args)
+        protected override async ETTask OnEvent(EventType.LoginFinish args)
         {
             var login = GRoot.inst.GetChild("Login");
             if(login != null)
@@ -14,6 +14,7 @@ namespace ET.Client
                 GRoot.inst.RemoveChild(login);
             }
             UIPackage.RemovePackage("Login");
+            await ETTask.CompletedTask;
         }
     }
 }

+ 3 - 2
Unity/Assets/Scripts/Codes/HotfixView/Client/Unit/OnChangeModelEvent.cs

@@ -4,7 +4,7 @@ using ET.Client;
 [Event(SceneType.None)]
 public class ChangeModelEventHandler : BEvent<ET.EventType.ChangeModeEvent>
 {
-    public override void OnEvent(ET.EventType.ChangeModeEvent args)
+    protected override async ETTask OnEvent(ET.EventType.ChangeModeEvent args)
     {
         var unitid = args.ObjectId;
         if (!UnitMgr.Instance.HasUnit(unitid))
@@ -17,6 +17,7 @@ public class ChangeModelEventHandler : BEvent<ET.EventType.ChangeModeEvent>
         {
             ModelViewComponent.Instance.RemoveChild(unitid);
         }
-        EventSystem.Instance.Publish(ET.EventType.OnNewZoneObject.Static.Clone(unitid, args.ModelName));
+        EventSystem.Instance.Publish(ET.EventType.OnNewZoneObject.Clone(unitid, args.ModelName));
+        await ETTask.CompletedTask;
     }
 }

+ 4 - 3
Unity/Assets/Scripts/Codes/HotfixView/Client/Unit/OnDestroyZoneObject.cs

@@ -1,11 +1,12 @@
-using UnityEngine;
+using ET.EventType;
+using UnityEngine;
 
 namespace ET.Client
 {
     [Event(SceneType.Current)]
-    public class OnDestroyZoneObjectHandler : AEvent<EventType.OnDestroyZoneObject>
+    public class OnDestroyZoneObjectHandler : BEvent<EventType.OnDestroyZoneObject>
     {
-        protected override async ETTask Run(Scene scene, EventType.OnDestroyZoneObject args)
+        protected override async ETTask OnEvent( EventType.OnDestroyZoneObject args)
         {
             //Log.Debug($"remove unit view: {args.ObjectId}");
             DestroyUnitModel(args.ObjectId);

+ 4 - 3
Unity/Assets/Scripts/Codes/HotfixView/Client/Unit/OnNewZoneObject.cs

@@ -10,7 +10,7 @@ namespace ET.Client
     [FriendOfAttribute(typeof(ET.Client.UnitRenderComponet))]
     public class OnNewZoneObjectHandler : BEvent<EventType.OnNewZoneObject>
     {
-        public override void OnEvent(EventType.OnNewZoneObject args)
+        protected override async ETTask OnEvent(EventType.OnNewZoneObject args)
         {
             var obj = UnitMgr.Instance.GetUnit(args.ObjectId);
             if (obj == null)
@@ -33,6 +33,7 @@ namespace ET.Client
             {
                 Log.Error("unknow new object");
             }
+            await ETTask.CompletedTask;
         }
 
         private static CommonLang.Geometry.Vector3 vecTemp = new();
@@ -46,7 +47,7 @@ namespace ET.Client
 
             var go = await GameObjectPool.Instance.Acquire(modelName);
             go.SetActive(true);
-            go.transform.parent = GlobalViewComponent.Instance.Unit;
+            go.transform.parent = GlobalViewMgr.Instance.Unit;
             vecTemp.Set(zu.X, zu.Y, zu.Z);
             go.transform.position = RenderUtils.UnityPosFromBattle(vecTemp);
             go.transform.rotation = RenderUtils.UnityRotationFromBattle(zu.Direction);
@@ -84,7 +85,7 @@ namespace ET.Client
             }
 
             GameObject go = await GameObjectPool.Instance.Acquire($"Effect_{res}");
-            go.transform.parent = GlobalViewComponent.Instance.Unit;
+            go.transform.parent = GlobalViewMgr.Instance.Unit;
             go.SetActive(true);
             go.transform.localScale = Vector3.one * zs.Info.FileBodyScale;
             vecTemp.Set(zs.X, zs.Y, zs.Z + zs.LaunchHeight);

+ 7 - 5
Unity/Assets/Scripts/Codes/HotfixView/Client/Unit/UnitRenderSystem.cs

@@ -9,12 +9,14 @@ using FairyGUI;
 
 namespace ET.Client
 {
-    [Event(SceneType.Current)]
+    [Event]
     [FriendOf(typeof(ET.Client.UnitRenderComponet))]
     public class AnimatorEventHandler : BEvent<EventType.PlayAnimatorEvent>
     {
-        public override void OnEvent(EventType.PlayAnimatorEvent args)
+        protected override async ETTask OnEvent(EventType.PlayAnimatorEvent args)
         {
+            await ETTask.CompletedTask;
+
             var component = ModelViewComponent.Instance.GetChild<UnitRenderComponet>(args.UnitId);
             if (component == null)
             {
@@ -68,11 +70,12 @@ namespace ET.Client
         }
     }
 
-    [Event(SceneType.None)]
+    [Event]
     public class SyncUnitPosEventHandler : BEvent<EventType.SyncUnitPosEvent>
     {
-        public override void OnEvent(SyncUnitPosEvent args)
+        protected override async ETTask OnEvent(SyncUnitPosEvent args)
         {
+            await ETTask.CompletedTask;
             var unitRender = ModelViewComponent.Instance.GetChild<UnitRenderComponet>(args.Id);
             if(unitRender != null)
             {
@@ -134,7 +137,6 @@ namespace ET.Client
             }
         }
 
-        [ObjectSystem]
         public class UnitRenerDestroySystem : DestroySystem<UnitRenderComponet>
         {
             protected override void Destroy(UnitRenderComponet self)

+ 66 - 16
Unity/Assets/Scripts/Codes/Model/Client/EventTypeClient.cs

@@ -5,22 +5,72 @@ namespace ET
 {
     namespace EventType
     {
+        public class SceneChangeStart
+        {
+            public int mapId;
+            public static SceneChangeStart Static = new();
+            public static SceneChangeStart Clone(int mapid)
+            {
+                Static.mapId = mapid;
+                return Static;
+            }
+        }
+        public class AfterCreateClientScene
+        {
+            public Scene scene;
+            public static AfterCreateClientScene Static = new();
+            public static AfterCreateClientScene Clone(Scene scene)
+            {
+                Static.scene = scene;
+                return Static;
+            }
+        }
+        public class AfterCreateCurrentScene
+        {
+            public Scene scene;
+            public static AfterCreateCurrentScene Static = new();
+            public static AfterCreateCurrentScene Clone(Scene scene)
+            {
+                Static.scene = scene;
+                return Static;
+            }
+        }
+        public class AppStartInitFinish { }
+        public class LoginFinish
+        {
+            public Player player;
+            public static LoginFinish Static = new();
+            public static LoginFinish Clone(Player player)
+            {
+                Static.player = player;
+                return Static;
+            }
+        }
+
+
         public class OnNewZoneObject
         {
             public uint ObjectId;
             public string ModelName;
 
             public static OnNewZoneObject Static = new();
-            public OnNewZoneObject Clone(uint id, string modelName = null)
+            public static OnNewZoneObject Clone(uint id, string modelName = null)
             {
-                ObjectId = id;
-                ModelName = modelName;
-                return this;
+                Static.ObjectId = id;
+                Static.ModelName = modelName;
+                return Static;
             }
         }
-        public struct OnDestroyZoneObject
+        public class OnDestroyZoneObject
         {
             public uint ObjectId;
+
+            public static OnDestroyZoneObject Static = new();
+            public static OnDestroyZoneObject Clone(uint id)
+            {
+                Static.ObjectId = id;
+                return Static;
+            }
         }
         public class PlayAnimatorEvent
         {
@@ -34,17 +84,17 @@ namespace ET
             public string Audio;
 
             public static PlayAnimatorEvent Static = new PlayAnimatorEvent();
-            public PlayAnimatorEvent Clone(uint id, AnimatorEventType type, string skill = "", float duration = -1, float speed = 1.0f, uint gid = 0, bool loop = false, string audio = "")
-            {
-                UnitId = id;
-                CommandType = type;
-                SkillName = skill;
-                Duration = duration;
-                Speed = speed;
-                GroupId = gid;
-                Loop = loop;
-                Audio = audio;
-                return this;
+            public static PlayAnimatorEvent Clone(uint id, AnimatorEventType type, string skill = "", float duration = -1, float speed = 1.0f, uint gid = 0, bool loop = false, string audio = "")
+            {
+                Static.UnitId = id;
+                Static.CommandType = type;
+                Static.SkillName = skill;
+                Static.Duration = duration;
+                Static.Speed = speed;
+                Static.GroupId = gid;
+                Static.Loop = loop;
+                Static.Audio = audio;
+                return Static;
             }
         }
         public class SkillChangeEvent { }

+ 10 - 2
Unity/Assets/Scripts/Codes/Model/Client/Message/NetClientComponent.cs

@@ -2,10 +2,18 @@
 
 namespace ET.Client
 {
-    public struct NetClientComponentOnRead
+    public class NetClientComponentOnRead
     {
         public Session Session;
         public object Message;
+
+        public static NetClientComponentOnRead Static = new();
+        public static NetClientComponentOnRead Clone(Session s, object message)
+        {
+            Static.Session = s;
+            Static.Message = message;
+            return Static;
+        }
     }
     
     [ComponentOf(typeof(Scene))]
@@ -13,4 +21,4 @@ namespace ET.Client
     {
         public int ServiceId;
     }
-}
+}

+ 8 - 8
Unity/Assets/Scripts/Codes/Model/Share/Entry.cs

@@ -2,19 +2,19 @@
 {
     namespace EventType
     {
-        public struct EntryLoadCfg
+        public class EntryLoadCfg
         {
         }
 
-        public struct EntryEvent1
+        public class EntryEvent1
         {
         }
 
-        public struct EntryEvent2
+        public class EntryEvent2
         {
         }
 
-        public struct EntryEvent3
+        public class EntryEvent3
         {
         }
     }
@@ -40,11 +40,11 @@
 
             Game.AddSingleton<NetServices>();
             Game.AddSingleton<Root>();
-            await EventSystem.Instance.PublishAsync(Root.Instance.Scene, new EventType.EntryLoadCfg());
+            await EventSystem.Instance.PublishWait<EventType.EntryLoadCfg>();
 
-            await EventSystem.Instance.PublishAsync(Root.Instance.Scene, new EventType.EntryEvent1());
-            await EventSystem.Instance.PublishAsync(Root.Instance.Scene, new EventType.EntryEvent2());
-            await EventSystem.Instance.PublishAsync(Root.Instance.Scene, new EventType.EntryEvent3());
+            await EventSystem.Instance.PublishWait<EventType.EntryEvent1>();
+            await EventSystem.Instance.PublishWait<EventType.EntryEvent2>();
+            await EventSystem.Instance.PublishWait<EventType.EntryEvent3>();
         }
     }
 }

+ 0 - 17
Unity/Assets/Scripts/Codes/Model/Share/EventType.cs

@@ -1,17 +0,0 @@
-
-namespace ET
-{
-    namespace EventType
-    {
-        public struct SceneChangeStart {
-            public int mapId;
-        }
-        public struct SceneChangeFinish { }
-        public struct AfterCreateClientScene { }
-        public struct AfterCreateCurrentScene { }
-        public struct AppStartInitFinish { }
-        public struct LoginFinish {
-            public Player player;
-        }
-    }
-}

+ 0 - 11
Unity/Assets/Scripts/Codes/Model/Share/EventType.cs.meta

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

+ 0 - 19
Unity/Assets/Scripts/Codes/ModelView/Client/Global/GlobalViewComponent.cs

@@ -1,19 +0,0 @@
-using FairyGUI;
-using UnityEngine;
-
-namespace ET.Client
-{
-    [ComponentOf(typeof(Scene))]
-    public class GlobalViewComponent: Entity, IAwake
-    {
-        [StaticField]
-        public static GlobalViewComponent Instance;
-
-        //public Camera UICamera;
-        public Camera BattleCamera;
-        public Transform Global;
-        public Transform Unit { get; set; }
-        public Transform RecycleNode { get; set; }
-        public GComponent HeadbarView { get; set; }
-    }
-}

+ 0 - 11
Unity/Assets/Scripts/Codes/ModelView/Client/Global/GlobalViewComponent.cs.meta

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

+ 2 - 2
Unity/Assets/Scripts/Core/Module/EventSystem/EventAttribute.cs

@@ -7,9 +7,9 @@ namespace ET
 	{
 		public SceneType SceneType { get; }
 
-		public EventAttribute(SceneType sceneType)
+		public EventAttribute(SceneType sceneType = SceneType.None)
 		{
 			this.SceneType = sceneType;
 		}
 	}
-}
+}

+ 10 - 52
Unity/Assets/Scripts/Core/Module/EventSystem/EventSystem.cs

@@ -585,7 +585,8 @@ namespace ET
             }
         }
 
-        public async ETTask PublishAsync<T>(Scene scene, T a) where T : struct
+        //更简单版本
+        public void Publish<T>(T t = null) where T : class
         {
             List<EventInfo> iEvents;
             if (!this.allEvents.TryGetValue(typeof(T), out iEvents))
@@ -593,80 +594,37 @@ namespace ET
                 return;
             }
 
-            using ListComponent<ETTask> list = ListComponent<ETTask>.Create();
-            
             foreach (EventInfo eventInfo in iEvents)
             {
-                if (scene.SceneType != eventInfo.SceneType && eventInfo.SceneType != SceneType.None)
-                {
-                    continue;
-                }
-                    
-                if (!(eventInfo.IEvent is AEvent<T> aEvent))
+                if (!(eventInfo.IEvent is BEvent<T> bEvent))
                 {
                     Log.Error($"event error: {eventInfo.IEvent.GetType().Name}");
                     continue;
                 }
 
-                list.Add(aEvent.Handle(scene, a));
-            }
-
-            try
-            {
-                await ETTaskHelper.WaitAll(list);
-            }
-            catch (Exception e)
-            {
-                Log.Error(e);
+                bEvent.Handle(t).Coroutine();
             }
         }
 
-        public void Publish<T>(Scene scene, T a) where T : struct
+        public async ETTask PublishWait<T>(T t = null) where T : class
         {
-            List<EventInfo> iEvents;
-            if (!this.allEvents.TryGetValue(typeof (T), out iEvents))
-            {
-                return;
-            }
-
-            SceneType sceneType = scene == null ? SceneType.None: scene.SceneType;
-            foreach (EventInfo eventInfo in iEvents)
-            {
-                if (sceneType != eventInfo.SceneType && eventInfo.SceneType != SceneType.None)
-                {
-                    continue;
-                }
-
-                
-                if (!(eventInfo.IEvent is AEvent<T> aEvent))
-                {
-                    Log.Error($"event error: {eventInfo.IEvent.GetType().Name}");
-                    continue;
-                }
-                
-                aEvent.Handle(scene, a).Coroutine();
-            }
-        }
-
-        //更简单版本
-        public void Publish<T>(T t = null) where T : class
-        {
-            List<EventInfo> iEvents;
-            if (!this.allEvents.TryGetValue(typeof(T), out iEvents))
+            if (!this.allEvents.TryGetValue( typeof( T ), out List<EventInfo> iEvents ))
             {
                 return;
             }
 
+            using ListComponent<ETTask> list = ListComponent<ETTask>.Create();
             foreach (EventInfo eventInfo in iEvents)
             {
                 if (!(eventInfo.IEvent is BEvent<T> bEvent))
                 {
-                    Log.Error($"event error: {eventInfo.IEvent.GetType().Name}");
+                    Log.Error( $"event error: {eventInfo.IEvent.GetType().Name}" );
                     continue;
                 }
 
-                bEvent.OnEvent(t);
+                list.Add( bEvent.Handle( t ) );
             }
+            await ETTaskHelper.WaitAll( list );
         }
 
         // Invoke跟Publish的区别(特别注意)

+ 5 - 26
Unity/Assets/Scripts/Core/Module/EventSystem/IEvent.cs

@@ -6,31 +6,6 @@ namespace ET
 	{
 		Type Type { get; }
 	}
-	
-	public abstract class AEvent<A>: IEvent where A: struct
-	{
-		public Type Type
-		{
-			get
-			{
-				return typeof (A);
-			}
-		}
-
-		protected abstract ETTask Run(Scene scene, A a);
-
-		public async ETTask Handle(Scene scene, A a)
-		{
-			try
-			{
-				await Run(scene, a);
-			}
-			catch (Exception e)
-			{
-				Log.Error(e);
-			}
-		}
-	}
 
     public abstract class BEvent<A>: IEvent
     {
@@ -42,6 +17,10 @@ namespace ET
             }
         }
 
-        public abstract void OnEvent(A a);
+        protected abstract ETTask OnEvent(A a);
+        public async ETTask Handle(A a)
+        {
+            await OnEvent(a);
+        }
     }
 }