Unity中实现HybridCLR热更新
  gEMN1CQh1PXt 2023年11月02日 95 0


一:前言

HybridCLR又称作huatuo(华佗)、wolong(卧龙)热更方案,底层是C++编写的,是一种热更新方案,与Lua、ILRuntime等都是不同的热更方案
HybridCLR扩充了il2cpp的代码,使它由纯AOT runtime变成AOT+Interpreter混合runtime,进而支持动态加载assembly,实现热更新
HybridCLR官网


二:什么是热更新

热更新是指当游戏出现bug,或者需要修改,增加某个功能的时候,我们不需要重新下载安装包,就可以更新游戏内容
当游戏上线后,遇见bug或者需要更新内容,一般有两种做法
第一种:重新打包上传一个新的安装包到应用商店(需要审核,费时间),然后让玩家下载新的客户端安装包(需要重新下载,费流量,会减少留存率)
第二种:在游戏内更新,游戏启动时去下载需要更新的补丁包或资源
第一种我们一般在大版本更新时使用,称为游戏整包更新,第二种称为热更新


三:热更新流程

——发现bug并修改bug
——资源打AB包上传,代码使用热更方案上传
——玩家启动游戏检测是否需要更新
——下载补丁包
——检测是否更新成功(例如通过MD5校验)
——进入游戏


四:HybridCLR的优点

——既不用像使用lua方案中需要多学习一门语言,也不用像ILRuntime方案中使用Mono虚拟机,效率低
——正因为HybridCLR是原生runtime级别实现,热更新部分的类型与主工程AOT部分类型是完全等价并且无缝统一的。可以随意调用、继承、反射、多线程,不需要生成代码或者写适配器


五:工具安装和配置HybridCLR环境

工具安装
——Unity版本在2020以上
——Visual Studio必须安装Windows Build Support(IL2CPP)或Mac Build Support(IL2CPP),Mac则需要安装Xcode ——Visual Studio必须在2019版本以上
——Visual Studio必须安装Unity的游戏开发使用c++的游戏开发组件

配置HybridCLR环境
——从Package中安装com.code-philosophy.hybridclr包https://gitee.com/focus-creative-games/hybridclr_unity.git
https://github.com/focus-creative-games/hybridclr_unity.git ——菜单栏选择HybridCLR—Installer,安装成功后会在控制台打印成功日志
——PlayerSetting—Scripting Backend选择为IL2CPP
——PlayerSetting—Api Compatability Level选择为Net 4.x或.Net Framework
——PlayerSetting—Use Incremental GC选择为不勾选(自v4.0.0起已经支持增量式GC, 但处于beta版本)


六:热更实现

——编写代码,拆分程序集(AOT程序集和热更程序集)
热更的程序集不能被非热更程序集所引用

——配置程序集
点击菜单HybridCLR/Settings打开配置界面,将热更的程序集添加到hotUpdateAssemblyDefinitions或hotUpdateAssemblies中(hotUpdateAssemblies不加dll后缀),
需要注意hotUpdateAssemblyDefinitions和hotUpdateAssemblies两个列表是等价的,不要重复添加

——运行菜单HybridCLR/Generate/All生成热更的dll和AOT的dll以及一些桥接函数,
{project}/HybridCLRData/HotUpdateDlls/StandaloneWindows64目录下的热更dll复制到Assets/StreamingAssets/HotUpdate.dll.bytes(复制后的dll要加.bytes后缀)

——修改热更代码后。运行菜单命令HybridCLR/CompileDll/ActiveBulidTarget重新编译热更新dll
{project}/HybridCLRData/HotUpdateDlls/StandaloneWindows64目录下的热更dll复制为刚才的打包输出目录的XXX_Data/StreamingAssets/HotUpdate.dll.bytes,重新运行程序


七:注意事项

——热更的程序集不能被非热更程序集所引用
——由于Unity资源管理系统的限制,挂载热更新脚本的资源(场景或prefab)必须打包成ab包,在实例化资源前先加载热更新dll即可,如果不打成ab包会发生scripting missing的错误

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
gEMN1CQh1PXt