事件系统
简介
事件系统是 ET 框架中一个重要的功能组件,它提供了一套完整的事件管理和分发机制。主要功能包括:
- 基于场景的事件隔离
- 异步事件支持
- 自动注册机制
核心概念
事件定义
事件在ET框架中通过定义struct来实现。每个事件结构体可以包含需要传递的数据。
csharp
namespace MH
{
public struct Main_Init
{
}
public struct Main_Init2
{
public long Id;
}
}
场景隔离
ET框架中的事件是基于场景进行隔离的,主要分为以下几种场景类型:
- Main: 主场景,通常用于处理全局事件
- Current: 当前场景,处理具体游戏场景中的事件
事件分发
事件的分发通过EventSystem进行统一管理:
csharp
// 触发事件
EventSystem.Instance.Publish(Root, new Main_Init());
EventSystem.Instance.Publish(Root, new Main_Init2()
{
Id = 1
});
// 异步事件
EventSystem.Instance.PublishAsync(Root, new Main_Init()).Coroutine();
await EventSystem.Instance.PublishAsync(Root, new Main_Init());
事件处理类
事件处理类通过特性(Attribute)来定义事件处理类,每个事件都需要指定其所属的场景类型:
csharp
namespace MH
{
[Event(SceneType.Main)]
public class MainInit_EventView : AEvent<Scene, Main_Init>
{
protected override async ETTask Run(Scene scene, Main_Init a)
{
scene.AddComponent<GlobalComponent>();
scene.AddComponent<CoroutineLockComponent>();
scene.AddComponent<ResourcesComponent>();
scene.AddComponent<UIPathComponent>();
scene.AddComponent<UIEventComponent>();
scene.AddComponent<CurrentSceneComponent>();
var uiComponent = scene.AddComponent<UIComponent>();
scene.AddComponent<UnitComponent>();
scene.AddComponent<AudioComponent>();
scene.AddComponent<LocalizationComponent>();
uiComponent.ShowWindow(WindowID.WindowID_Login);
// await SceneChangeHelper.SceneChangeTo(scene, "Game");
}
}
}
设计优势
事件系统的主要优势
解耦合设计:
- 事件发送者和接收者完全解耦
- 模块间通过事件进行通信,无需直接依赖
场景隔离:
- 不同场景的事件互不干扰
- 避免事件误触发和跨场景污染
异步支持:
- 支持异步事件处理
- 适合处理复杂的业务逻辑
技术支持
获取帮助
- 💬 加入QQ群讨论交流
(ET框架群)
: 474643097 - ⭐ 在GitHub上关注项目获取最新更新