分享

一个划时代的 Unity 全平台热更新方案

 风声之家 2022-07-08 发布于江苏

小金子 程序员掘金 2022-07-05 21:30 发表于北京

收录于合集#C++3个

哈喽,大家好,我是小金子。

今天给大家推荐的项目是「huatuo」,一个特性完整、零成本、高性能、低内存的近乎完美的 Unity 全平台原生 c# 热更方案。

特性

1、特性完整

近乎完整实现了 ECMA-335 规范,除了项目中"限制和注意事项" 之外的特性都支持。

2、零学习和使用成本

huatuo 将纯 AOT runtime 增强为完整的 runtime,使得热更新代码与 AOT 代码无缝工作。脚本类与 AOT 类在同一个运行时内,可以随意写继承、反射、多线程(volatile、ThreadStatic、Task、async)之类的代码。不需要额外写任何特殊代码、没有代码生成,也没有什么特殊限制。

3、执行高效

实现了一个极其高效的寄存器解释器,所有指标都大幅优于其他热更新方案。

4、内存高效

热更新脚本中定义的类跟普通 c# 类占用一样的内存空间,远优于其他热更新方案。

5、原生支持 hotfix 修复 AOT 部分代码

几乎不增加任何开发和运行开销。

6、开创性地实现了 differential hybrid dll 技术

可以将某个热更新 dll 先 AOT 形式打包,后面可以对该 dll 任意增删改,huatuo 会智能地让变化或者新增的类和函数以 interpreter 模式运行,但未改动的类和函数以 AOT 方式运行。这意味着热更新的游戏逻辑的运行性能将接近原生 AOT 的水平。

工作原理

huatuo 从 mono 的 hybrid mode execution 技术中得到启发,为 unity 的 il2cpp 之类的 AOT runtime 额外提供了 interpreter 模块,将它们由纯 AOT 运行时改造为 "AOT + Interpreter" 混合运行方式。

图片

更具体地说,huatuo 做了以下几点工作:

  • 实现了一个高效的元数据(dll)解析库

  • 改造了元数据管理模块,实现了元数据的动态注册

  • 实现了一个 IL 指令集到自定义的寄存器指令集的 compiler

  • 实现了一个高效的寄存器解释器

  • 额外提供大量的 instinct 函数,提升解释器性能

  • 提供 hotfix AOT 的支持

项目地址:https://github.com/focus-creative-games/huatuo

确定

  • 不看此公众号

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多