HybridCLR 介绍
HybridCLR 是一个 特性完整、零成本、高性能、低内存 的 近乎完美 的 Unity 全平台原生 c#热更新解决方案。
HybridCLR 扩充了 il2cpp 运行时代码,使它由纯 AOT runtime 变成 AOT+Interpreter 混合 runtime,进而原生支持动态加载 assembly,从底层彻底支持了热更新。使用 HybridCLR 技术的游戏不仅能在 Android 平台,也能在 IOS、Consoles、WebGL 等所有 il2cpp 支持的平台上高效运行。
由于 HybridCLR 对 ECMA-335 规范 的良好支持以及对 Unity 开发工作流的高度兼容,Unity 项目在接入 HybridCLR 后,可以几乎无缝地获得 C#代码热更新的能力,开发者不需要改变日常开发习惯和要求。HybridCLR 首次实现了将 Unity 平台的全平台代码热更新方案的工程难度降到几乎为零的水平。
欢迎拥抱现代原生 C#热更新技术 !
特性
- 近乎完整实现了 ECMA-335 规范 ,只有极少量的 不支持的特性 。
- 零学习和使用成本。对绝大多数开发者来说写代码近乎没有限制。 热更新代码与 AOT 代码无缝工作,可以随意写继承、 泛型 、 反射 之类的代码。不需要额外写任何特殊代码、没有代码生成
- 完全支持多线程,包含但不限于 volatile、ThreadStatic、async Task 等相关功能和特性。这是其他所有热更新方案都不支持的
- 几乎完全兼容 Unity 的工作流。包括且不限于支持热更新 MonoBehaviour 、ScriptableObject、 DOTS 技术,资源上挂载的热更新脚本可以正确实例化,这是其他所有热更新方案都不支持的
- 执行高效。实现了一个极其高效的寄存器解释器,所有指标都大幅优于其他热更新方案。 性能测试报告
- 内存高效。 热更新脚本中定义的类跟普通 c#类占用一样的内存空间,远优于其他热更新方案。 内存占用报告
- 支持 MonoPInvokeCallback,可以与 native 代码或者其他语言如 lua、javascript、python 良好交互
- 支持一些 il2cpp 不支持的特性,如 makeref、 reftype、__refvalue 指令
- 支持独创的 Differential Hybrid Execution(DHE) 差分混合执行技术,即可以对 AOT dll 任意增删改,会智能地让未改动的函数以 AOT 方式运行,变化或者新增的函数以 interpreter 模式运行,让热更新的游戏逻辑的运行性能基本达到原生 AOT 的水平
- 支持 热重载 技术,可以 100%卸载程序集
- 支持现代的 dll 加密技术,有效保障代码安全
支持的版本与平台
- 支持 2019.4.x、2020.3.x、2021.3.x、2022.3.x、2023.2.x、 6000.x.y 全系列 LTS 版本
- 支持所有 il2cpp 支持的平台
- 支持团结引擎和鸿蒙平台
工作原理
HybridCLR 从 mono 的 mixed mode execution 技术中得到启发,为 unity 的 il2cpp 之类的 AOT runtime 额外提供了 interpreter 模块,将它们由纯 AOT 运行时改造为"AOT + Interpreter"混合运行方式。
更具体地说,HybridCLR 做了以下几点工作:
- 实现了一个高效的元数据(dll) 解析库
- 改造了元数据管理模块,实现了元数据的动态注册
- 实现了一个 IL 指令集到自定义的寄存器指令集的 compiler
- 实现了一个高效的寄存器解释器
- 额外提供大量的 instinct 函数,提升解释器性能
稳定性状况
HybridCLR 已经被广泛验证是非常高效、稳定的 Unity 热更新解决方案。
当前发布了 极其稳定 的 1.x-5.x 正式版本,足以满足大中型商业项目的稳定性要求。 目前有数千个商业游戏项目完成接入,其中有几百款已经双端上线,上线的项目中包括 MMORPG、重度卡牌、重度塔防之类的游戏。 绝大多数头部游戏公司 (如腾讯、网易)都已经在使用 HybridCLR。
可查看我们已知的头部公司中使用 HybridCLR 并且已经上线的 项目列表 。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论