语言: English | 中文
一个 干净、优雅、零 GC 的 Unity 事件系统(Event Bus)。
-
事件发布(Publish)全程 0GC
- 订阅阶段允许初始化开销(反射扫描、创建订阅对象)
- 运行时无装箱拆箱、无 LINQ、无 foreach
- 强类型事件分发,性能友好
-
可在任意 Class 或 MonoBehaviour 中使用
-
注册/反注册代码与业务逻辑完全解耦
提供三种监听方式:- 继承 EventListenerBehaviour
- IAutoEventListener + EventListenerHost
- 手动 Subscribe / Dispose
-
无三方依赖,纯 C# 实现
public readonly struct TestEvent
{
public readonly int id;
public readonly string name;
public TestEvent(int id, string name)
{
this.id = id;
this.name = name;
}
}var evt = new TestEvent(1, "Test1");
SiYangEventBus.Global.Publish(evt);public class SiYangEventListener3 : MonoBehaviour
{
private IDisposable _subscription;
private void OnEnable()
{
_subscription = SiYangEventBus.Global.Subscribe<TestEvent>(OnTestEvent);
}
private void OnDisable()
{
_subscription?.Dispose();
}
private void OnTestEvent(TestEvent e)
{
Debug.Log($"[SiYangEventListener3] id={e.id}, name={e.name}");
}
}public class SiYangEventListener1 : EventListenerBehaviour
{
[ListenEvent]
private void TestEventListener(TestEvent e)
{
Debug.Log($"[SiYangEventListener1] id={e.id}, name={e.name}");
}
}[RequireComponent(typeof(EventListenerHost))]
public class SiYangEventListener2 : MonoBehaviour, IAutoEventListener
{
[ListenEvent]
private void TestEventListener(TestEvent e)
{
Debug.Log($"[SiYangEventListener2] id={e.id}, name={e.name}");
}
}同物体上挂载脚本EventListenerHost
SiYangUnityEventSystem 的目标是:
- 最小 GC 开销
- 清晰的代码结构
- 简单优雅的事件使用体验
- 灵活的扩展方式