Skip to content

事件系统

简介

事件系统是 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");
        }
    }
}

设计优势

事件系统的主要优势

  1. 解耦合设计

    • 事件发送者和接收者完全解耦
    • 模块间通过事件进行通信,无需直接依赖
  2. 场景隔离

    • 不同场景的事件互不干扰
    • 避免事件误触发和跨场景污染
  3. 异步支持

    • 支持异步事件处理
    • 适合处理复杂的业务逻辑

技术支持

获取帮助

  • 💬 加入QQ群讨论交流(ET框架群) : 474643097
  • ⭐ 在GitHub上关注项目获取最新更新

Released under the MIT License.