|
@@ -629,7 +629,7 @@ namespace ET
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- SceneType sceneType = scene.SceneType;
|
|
|
+ SceneType sceneType = scene == null ? SceneType.None: scene.SceneType;
|
|
|
foreach (EventInfo eventInfo in iEvents)
|
|
|
{
|
|
|
if (sceneType != eventInfo.SceneType && eventInfo.SceneType != SceneType.None)
|
|
@@ -647,7 +647,28 @@ namespace ET
|
|
|
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))
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach (EventInfo eventInfo in iEvents)
|
|
|
+ {
|
|
|
+ if (!(eventInfo.IEvent is BEvent<T> bEvent))
|
|
|
+ {
|
|
|
+ Log.Error($"event error: {eventInfo.IEvent.GetType().Name}");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ bEvent.OnEvent(t).Coroutine();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// Invoke跟Publish的区别(特别注意)
|
|
|
// Invoke类似函数,必须有被调用方,否则异常,调用者跟被调用者属于同一模块,比如MoveComponent中的Timer计时器,调用跟被调用的代码均属于移动模块
|
|
|
// 既然Invoke跟函数一样,那么为什么不使用函数呢? 因为有时候不方便直接调用,比如Config加载,在客户端跟服务端加载方式不一样。比如TimerComponent需要根据Id分发
|