hybridCLR热更
多种热更方案:
Lua方案:Lua虚拟机+Lua代码
ILRuntime(.net虚拟机:面临跨域问题需要写适配器等问题)
HybridCLR:不需要像lua一样安装lua虚拟机;AOT代码变成静态代码
原理:
hybridCLR是IL2CPP技术的进一步修改,扩充了il2cpp的代码,使他由纯AOT runtime变成AOT+Interpreter混合runtime,进而原生支持动态加载assembly,使得基于il2cpp backend打包的游戏不进能再android平台,也能再ios、console 等现在的JIT平台上高效地以AOT+interpreter混合模式执行,从底层彻底的支持热更新。其他热更方案是独立的VM,与il2cpp关系本质上相当于mono中嵌入lua的关系。因此类型系统不统一,为了让热更新类型能够继承AOT部分类型,需要写适配器,并且解释器中的类型不能为主工程的类型系统所识别。特性不完整 ,开发麻烦,运行效率低下。
链接:
HybridCLR热更新 原理及示例分析 huatuo之AOT泛型限制及原理介绍 huatuo热更框架安装 GameFramework框架接入HybridCLR热更框架
下载:
gitee/HybridCLR hybridclr_trial工程
关于作者:
walon :Code Philosophy(代码哲学官网) 创始人
毕业于清华大学物理系,2006年CMO金牌,奥数国家集训队成员,保送清华基科班。专注于游戏技术,擅长开发架构和基础技术设施。
现在已经是比较稳定的beta版本,预计正式版在8月份。目前已经支持pc和安卓及ios。已知有十几个项目在移动平台完整运行起来了。
yoyo工程位置:
百度网盘>工作>me>HybridCLR>My projecthuatuo.zip
unity2020.3.31f1c1
报错
报错1:
No ‘git‘ executable was found. Please install Git on your system then restart 问题搜索,重启电脑就可以了
Project has invalid dependencies No git executable was found
解决1:
未安装点击安装hybridclr
hybridclr->generate->all
hybridclr->build->buildassetscopytostreamingassets
点击windows上的hybridclr-》build->win64
报错2:
Building Library\Bee\artifacts\WinPlayerBuildProgram\mpmc6\bt9a_o_vm6.lump.obj failed with output:
xg9o_vm6.lump.cpp原因是vs2022的问题
解决2:
用vs2019就好了 或者是在vs2022里写一个脚本直接扔到工程的Assets文件夹下就可以了,脚本如下,就可以打包出来了hybridclr-》build->win64
Workaround for building with IL2CPP with Visual Studio 2022 17.4
快速上手流程
- 创建空的Unity项目。
- 创建ConsoleToScreen.cs脚本,打印日志到屏幕上,方便定位错误
- 场景中创建一个空GameObject,将ConsoleToScreen挂到上面
- 创建 Assets/HotUpdate 目录,在目录下 右键 Create/Assembly Definition ,创建一个名为HotUpdate的程序集模块
- Windows/Package Manager > https://github.com/focus-creative-games/hybridclr_unity.git
- HybridCLR/Installer
- 打开菜单 HybridCLR/Settings, 在Hot Update Assemblies配置项中添加HotUpdate程序集
- 如果你用的hybridclr包低于v4.0.0版本,关闭GC
- Scripting Backend 改 IL2CPP
- Api Compatability Level .Net 4.x 或者.Net Framework
- 创建热更新脚本Hello.cs
- 创建Assets/LoadDll.cs脚本,然后在main场景中创建一个GameObject对象,挂载LoadDll脚本。--显然,主工程不能直接引用热更新代码。有多种方式可以从主工程调用热更新程序集中的代码,这里通过反射来调用热更新代码。
- Editor中试运行运行main场景,屏幕上会显示 'Hello,HybridCLR',表示代码工作正常。
- 打包运行
- HybridCLR/Generate/All
- {proj}/HybridCLRData/HotUpdateDlls/StandaloneWindows64(MacOS下为StandaloneMacXxx)目录下的HotUpdate.dll复制到Assets/StreamingAssets/HotUpdate.dll.bytes
- Build And Run->打包到{proj}->Release-Win64文件夹中
- 修改代码Debug.Log("Hello, World");
- HybridCLR/CompileDll/ActiveBulidTarget重新编译热更代码
- 从项目中复制HotUpdate.dll到发布的HotUpdate.dll.bytes
- 重新运行程序热更新代码生效!