com.gameframex.unity.code-p.../README.md

5.6 KiB
Raw Permalink Blame History

HybridCLR

license

logo



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.0.x全系列LTS版本
  • 支持所有il2cpp支持的平台
  • 支持团结引擎和鸿蒙平台

工作原理

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

icon

更具体地说HybridCLR做了以下几点工作

  • 实现了一个高效的元数据(dll)解析库
  • 改造了元数据管理模块,实现了元数据的动态注册
  • 实现了一个IL指令集到自定义的寄存器指令集的compiler
  • 实现了一个高效的寄存器解释器
  • 额外提供大量的instinct函数提升解释器性能

稳定性状况

HybridCLR已经被广泛验证是非常高效、稳定的Unity热更新解决方案良好满足大中型商业项目的稳定和性能要求。

目前已经有数千个商业游戏项目接入了HybridCLR其中有超过千个已经在App Store和Google Player上线仅仅iOS免费榜前500名中就有近百款使用了HybridCLR。上线的项目中包括MMORPG、重度卡牌、重度塔防之类的游戏。国内绝大多数Top游戏公司都已经在使用HybridCLR。

可查看我们已知的头部公司中使用HybridCLR并且已经上线的项目列表

支持与联系

关于作者

walon Code Philosophy代码哲学 创始人

毕业于清华大学物理系2006年CMO金牌奥数国家集训队成员保送清华基科班。专注于游戏技术擅长开发架构和基础技术设施。

license

HybridCLR is licensed under the MIT license