GameFramework事件
Game Framework 中的很多模块在完成操作后都会抛出内置事件,监听这些事件将大大解除游戏逻辑之间的耦合。
除了这些内置事件,用户也可以定义自己的游戏逻辑事件。为了自定义游戏逻辑事件,需要在项目内将 EventId 枚举进行扩展,扩展的事件需要从 UnityGameFramework.Runtime.EventId.GameEventStart 之后开始。
/// 事件类型编号。
/// </summary>
public enum EventId
{
GameEventStart = UnityGameFramework.Runtime.EventId.GameEventStart,
}
同时,在游戏逻辑层给 EventComponent 增加一些扩展方法,使得游戏内能够方便的使用这个 EventId 进行操作。
{
// 扩展检查订阅事件方法
public static bool Check(this EventComponent eventComponent, EventId eventId, EventHandler<GameEventArgs> handler)
{
return eventComponent.Check((UnityGameFramework.Runtime.EventId)eventId, handler);
}
// 扩展订阅事件方法
public static void Subscribe(this EventComponent eventComponent, EventId eventId, EventHandler<GameEventArgs> handler)
{
eventComponent.Subscribe((UnityGameFramework.Runtime.EventId)eventId, handler);
}
// 扩展取消订阅事件方法
public static void Unsubscribe(this EventComponent eventComponent, EventId eventId, EventHandler<GameEventArgs> handler)
{
eventComponent.Unsubscribe((UnityGameFramework.Runtime.EventId)eventId, handler);
}
}
订阅事件:
EventComponent eventComponent = GameEntry.GetComponent<EventComponent>();
eventComponent.Subscribe(UnityGameFramework.Runtime.EventId.LoadDataTableSuccess, OnLoadDataTableSuccess);
取消订阅事件:
EventComponent eventComponent = GameEntry.GetComponent<EventComponent>();
eventComponent.Unsubscribe(UnityGameFramework.Runtime.EventId.LoadDataTableSuccess, OnLoadDataTableSuccess);
定义事件处理函数
private void OnLoadDataTableSuccess(object sender, GameEventArgs e)
{
UnityGameFramework.Runtime.LoadDataTableSuccessEventArgs ne = e as UnityGameFramework.Runtime.LoadDataTableSuccessEventArgs;
// Do something.
Log.Info("Load data table '{0}' success.", ne.DataTableName);
}
抛出事件:
EventComponent eventComponent = GameEntry.GetComponent<EventComponent>();
// 抛出事件,这个操作是线程安全的,即使不在主线程中抛出,也可保证在主线程中回调事件处理函数,但事件会在抛出后的下一帧分发。
eventComponent.Fire(this, new XXXEvent());
// 抛出事件立即模式,这个操作不是线程安全的,事件会立刻分发。
eventComponent.FireNow(this, new XXXEvent());
当事件被抛出后,订阅过此事件的事件处理函数就会得到响应。
enentCompoent
int Count (int id)
获取事件处理函数的数量。 更多…
bool Check (int id, EventHandler< GameEventArgs > handler)
检查是否存在事件处理函数。 更多…
void Subscribe (int id, EventHandler< GameEventArgs > handler)
订阅事件处理回调函数。 更多…
void Unsubscribe (int id, EventHandler< GameEventArgs > handler)
取消订阅事件处理回调函数。 更多…
void SetDefaultHandler (EventHandler< GameEventArgs > handler)
设置默认事件处理函数。 更多…
void Fire (object sender, GameEventArgs e)
抛出事件,这个操作是线程安全的,即使不在主线程中抛出,也可保证在主线程中回调事件处理函数,但事件会在抛出后的下一帧分发。 更多…
void FireNow (object sender, GameEventArgs e)
抛出事件立即模式,这个操作不是线程安全的,事件会立刻分发。 更多…