大家好,

关于我过去一年工作的事件系统更新。

我开始这个项目是因为对Unity事件系统感到非常沮丧,尤其是在Timeline和更大的工作流中。最初我想只是建立一个小的替代或包装,但它逐渐变成了更深入地了解Unity Events如何在底层工作。

我最终逆向工程了系统,部分反编译,并研究了它的设计、为什么它工作得这样,哪里是真正的瓶颈。像反射性能损耗、隐藏的GC成本、有限的灵活性和边缘情况下的引用和序列化行为等。

了解了所有这些之后,我决定从零开始建立自己的系统,而不是围绕Unity的限制工作。

目标不是仅仅“建立一个不同的事件系统”,而是设计出更安全、更灵活、在真实项目中更快的系统。

一些关键的架构胜利:

  • 100%的方法重命名安全,通过唯一ID
  • 无限制的参数类型和数量支持
  • 零GC分配和最多10倍的执行速度
  • 现代UI,内置诊断系统和跟踪器

我还必须深入研究Unity在不同运行时(Mono / JIT vs IL2CPP / AOT)中的行为。这个部分的确是其中最困难的,尤其是处理泛型和反射在平台和构建类型之间的不同行为,以及如何避免在那里出现的性能陷阱。

经过大量的迭代和性能测试,系统现在在真实测试中始终比UnityEvents快,速度大约是3倍到10倍,且在主执行路径上零GC。

我目前正在编写一个完整的技术开发日志,展示了Unity的内部实现、我做出的设计决策、错误和系统一步一步演变的过程。

完整的技术开发日志和工具的发布将很快到来。

如果你想支持这个项目或在等待期间浏览我的其他工具,我将非常感激:

https://assetstore.unity.com/publishers/125384

感谢所有的支持,祝大家开心地开发!