我一直喜欢 Unity Events 的想法。能够直接从调试器中连接东西,对设计师、快速迭代和使用方便都是很棒的。但是,使用它们在更大的项目上后,我不断遇到相同的限制:

  • 方法签名受到严重限制,所以我经常不得不创建包装方法。
  • 重命名方法会静默地破坏事件绑定。
  • 当事件频繁触发时,性能不是理想的。
  • 它很难追踪整个项目中事件的使用位置。

几年前,我开始探索自己构建事件系统的想法,主要是作为一个学习项目。随着时间的推移,它发展成为 Ramdal Events,我已经将其用作 Unity Events 的替代品,用于我的许多工作流程。一些我关注的事情是:

  • 使用几乎没有签名限制的方法。
  • 与零 GC 分配的委托级性能。
  • 可以安全重构的方法和组件,使得重命名它们不会破坏现有的事件绑定。
  • 可以追踪和验证整个项目中的事件。
  • 支持几乎任何参数类型,具有可扩展的参数系统。
  • 内置诊断工具,快速识别断裂的事件绑定和其他问题。

这个项目最终变得比我最初预期的大得多,我在 Unity 序列化、反射、缓存、代码生成、JIT vs. AOT 编译和 IL2CPP 等方面学到了很多。

https://assetstore.unity.com/packages/slug/341672

所有内容都是公开文档的,包括 API、逐步视频教程、示例和支持资源。如果您对实现或设计决策有任何问题,我很高兴回答。