目录
一、什么是热更新
过程
热更新的基本流程
导出热更资源
游戏流程热更
二、热更新的优点
开发端
客户端
使用Lua热更新方案的优缺点
XLua
优点
缺点
基于C#热更新方案的优缺点
ILRuntime
优点
缺点
解决方案
HybridCLR(HuaTuo/wolong)
HybridCLR工作原理
优点
缺点
声明:本内容来自各种资料和个人总结
Unity热更新是一种可以让游戏在不关闭App的情况下直接更新代码或资源的技术与传统的游戏开发方式不同,使用热更新技术可以在游戏运行时修复bug、添加新功能或改进游戏性等,而无需通过重新打包发布更新版本的方式。用户不用去重新下载安装包去更新游戏的逻辑等功能。
Unity游戏热更新包含两个方面,一个是资源的更新,一个是脚本的更新。
Unity提供可以热更的方案就是AssetsBundle(后面简称AB)。资源、代码都可以打成AB包,放到服务器上,然后比对版本,进行热更。
Unity3D的热更新会涉及3个目录:游戏资源目录、数据目录、网络资源地址。
接下来讲一下热更的基本流程:热更分成2部分
更新注意:
1. 要有下载失败重试几次机制;
2. 要进行超时检测;
3. 要记录更新日志,例如哪几个资源时整个更新流程失败。
1、可以迅速修复Bug,避免用户再去重新下载安装包,在游戏或软件内部就更新BUG
2、减少安装包的体积,将资源上传到服务器,在运行时动态下载剩余资源
3、迅速进行游戏更新,可以不用再上架应用商店,直接对游戏或软件进行更新
1、开发端更新了游戏或软件内容,比如更新了脚本、替换了资源
2、将需要更新的代码或资源,打包成AssetBundle放到服务器
3、在服务器上,修改记录版本号的文件
4、修改服务器上的对比文件
1、运行程序,进行版本号的比较,版本号不同则进行下面操作
2、下载服务器上的对比文件,类似于目录,确定下载列表
3、根据下载列表,下载所需的资源
4、解压资源,用最新的对比文件覆盖本地的对比文件
市面上大部分都是ToLua和XLua 都是使用的语言都是lua和lua虚拟机
所以我们统称为lua
Lua语言由C语言编写,通用性强,可以运行在各类操作系统
Lua语言是解释性语言,由虚拟器解释执行,无需进行编译
有很多成熟的项目在使用Lua,有较多的使用文档
学使用一门Lua语言,增加学习和开发成本(心酸泪)
Lua是弱类型的非面向对象的语言,在大型项目中容易造成结构混乱和维护困难的问题
Lua需要在C#环境中提供运行环境,对Lua和C#进行相互转换和调用,效率低下,不如原生C#进行开发
是掌趣科技开发的开源unity热更框架, 这个框架打破了C#不能做ios平台热更的规则(在ios平台中是以ILRuntime+dll的方式解释执行,当然是在IL2CPP下)。有了这个框架,开发者只需使用C#这一种语言即可,而不用在C#和lua之间切换,但这个框架也是有很多坑的,在一些方面性能是不如lua的,Git上的贡献者也很少,暂时没有经过大量项目的考验,用的人相对还是比较少
Unity开发均使用C#,开发语言统一,编码更容易。
使用纯C#开发无需另创虚拟机等环境,效率高,性能远高于Lua
方案均有各自的局限性,直接反射方式不仅损耗性能,在不支持JIT的系统(IOS)上无法使用。
ILRuntime解决了 JIT
DLL反射热更新: 使用编译后的DLL文件进行替换,利用反射方式把所需C#组件绑定到相应的对象上使用。
ILRuntime:本质还是DLL的替换,但实现了一个 ILR 使其能够在不支持 JIT
HybridCLR是一个特性完整、零成本、高性能、低内存的近乎完美的c#热更新方案。
HybridCLR提供一个非常完整的跨平台 CLR 运行时,不仅能在Android平台,也能在IOS、Consoles等限制了JIT的平台上高效地以 AOT
Unity开发者从此可以完全使用c#开发,并且零成本使用几乎所有的c#特性,再也不需要使用各种脚本或者不完整的热更新方案了。
HybridCLR扩充了unity的 il2cpp runtime,将它由纯AOT运行时改造为"AOT
更具体地说,HybridCLR做了一下几点工作:
实现了一个高效的元数据(dll)解析库
改造了 il2cpp
实现了一个IL指令集到自定义的寄存器指令集的compiler
实现了一个高效的寄存器解释器
额外提供大量的instinct函数,提升解释器性能
提供hotfix AOT
与其他热更新方案的区别
特性完整。 近乎完整实现了ECMA-335规范,除了 下文中"限制和注意事项" 之外的特性都支持。
零学习和使用成本。 HybridCLR是完整的 CLR 运行时,热更新代码与 AOT 代码无缝工作。不需要额外写- - 任何特殊代码、没有代码生成,也没有什么特殊限制。脚本类与 AOT
执行高效。实现了一个极其高效的寄存器解释器,所有指标都大幅优于其他热更新方案。性能测试报告
内存高效。 热更新脚本中定义的类跟普通c#类占用一样的内存空间,远优于其他热更新方案。内存占用报告
原生支持修复 AOT
目前(2023上半年)上线的实战的商业项目较少 本人未知(以后可能会更新 未来可期 )