Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

广播监听 / Broadcast-Listen (Unity EventCenter)

一套轻量级的 Unity 事件中心 / 广播-监听 框架,基于观察者模式实现,用于解耦游戏内各模块之间的通信。 A lightweight Unity event-center / broadcast-listen framework based on the observer pattern, used to decouple communication between in-game modules.

目录结构 / Project Structure

广播监听/
├── CallBack.cs        # 委托定义(0~5 个参数)  Delegate definitions (0–5 params)
├── MessageContent.cs  # 事件码枚举              Event-code enum
├── EventCenter.cs     # 事件中心核心            Event center core
└── faultDataMgr.cs    # 使用示例                Usage example

核心组件 / Core Components

1. MessageContent(事件码 / Event Code)

所有事件类型集中定义在一个枚举里,避免散落的字符串/魔法数字;新增事件只需在枚举中添加一项。 All event types are centralized in one enum to avoid scattered strings / magic numbers. Add a new entry to the enum to introduce a new event.

public enum MessageContent
{
    ConnectSuccess,
    faultData
}

2. CallBack(委托 / Delegate)

封装了 0~5 个泛型参数的委托,覆盖大部分传参场景。 Wraps delegates with 0–5 generic parameters, covering most parameter-passing scenarios.

public delegate void CallBack();
public delegate void CallBack<T>(T arg);
public delegate void CallBack<T, X>(T arg1, X arg2);
// ... up to 5 parameters

3. EventCenter(事件中心 / Event Center)

静态类,内部用 Dictionary<MessageContent, Delegate> 维护「事件码 → 委托列表」的映射,提供三个核心 API: A static class that uses Dictionary<MessageContent, Delegate> to map event codes to delegate lists, exposing three core APIs:

方法 / Method 作用 / Purpose
AddListener 订阅某个事件(支持 0~5 个参数重载) Subscribe to an event (0–5 param overloads)
RemoveListener 取消订阅(重载与 Add 对应) Unsubscribe (overloads match Add)
Broadcast 广播事件,触发所有订阅者 Broadcast, invoking all subscribers

添加 / 移除时会校验委托类型一致性,类型不匹配会抛出异常,便于尽早发现错误。 Add/remove validates delegate-type consistency and throws on mismatch, surfacing errors early.

使用方式 / Usage

订阅事件 / Subscribe

// 无参事件 / No-arg event
EventCenter.AddListener(MessageContent.ConnectSuccess, OnConnectSuccess);

// 带参事件(泛型参数需与广播端一致) / Typed event (generic args must match the broadcaster)
EventCenter.AddListener<faultData>(MessageContent.faultData, ProcessFaultData);

private void OnConnectSuccess() { }
private void ProcessFaultData(faultData data) { }

广播事件 / Broadcast

// 无参广播 / No-arg broadcast
EventCenter.Broadcast(MessageContent.ConnectSuccess);

// 带参广播 / Typed broadcast
EventCenter.Broadcast(MessageContent.faultData, someFaultData);

取消订阅 / Unsubscribe

对象销毁或不再需要时务必移除监听,避免内存泄漏与空引用: Always remove listeners when the object is destroyed or no longer needed, to avoid memory leaks and null-reference calls.

void OnDestroy()
{
    EventCenter.RemoveListener<faultData>(MessageContent.faultData, ProcessFaultData);
    EventCenter.RemoveListener(MessageContent.ConnectSuccess, OnConnectSuccess);
}

完整示例可参考 faultDataMgr.cs。 See faultDataMgr.cs for a complete example.

注意事项 / Notes

  • 生命周期管理 / Lifecycle:监听者被销毁(如 OnDestroy)前一定要 RemoveListener,否则事件触发时可能调用到已销毁对象的方法。 Remove listeners before a subscriber is destroyed (OnDestroy), or a broadcast may invoke methods on a dead object.
  • 类型匹配 / Type matching:同一个事件码在一次会话中只能绑定同一种委托签名,混用(如先无参后带参)会抛异常。 An event code may only bind one delegate signature per session; mixing (e.g. no-arg then typed) throws.
  • 无持久化 / No persistence:事件表保存在静态字典中,切场景若未显式清理会一直存在;按需自行清理。 The event table lives in a static dictionary and persists across scene loads unless explicitly cleared.

适用场景 / Use Cases

  • UI 与逻辑层解耦(如按钮点击 → 业务流程) Decouple UI from logic (e.g. button click → business flow)
  • 网络/连接状态回调(如示例中的 ConnectSuccess) Network/connection callbacks (e.g. ConnectSuccess)
  • 模块间松耦合的消息通知(如 faultData 故障数据下发) Loose-coupled module notifications (e.g. faultData push)

基于 Unity + C#,无第三方依赖,直接拖入工程即可使用。 Built on Unity + C#, no third-party dependencies — drop the files into your project to use.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages