Unity热更新解决方案
一、热更新概念
1、什么是热更新
游戏或软件更新时,无需重新下载客户端进行安装,而是在应用程序启动的情况下,对内部进行资源或代码的更新。
2、热更新的好处
- 迅速修复Bug:避免重复下载安装包,游戏内部更新修复Bug
- 提升玩家留存率:避免玩家因超大安装包而流失
- 灵活迭代游戏内容:底层程序无需改动,仅更新部分资源,即可替换界面、玩法、活动内容,快速上线新版本内容。
二、如何实现热更新
热更新主要分两部分:资源热更新以及脚本热更新。
1、AssetBundle
也就是我们常说的AB包,负责资源热更新。这是Unity提供的一种资源更新技术,可以将游戏资源(美术资源、音乐音效、脚本或代码等)打包为AB包,它本身也提供了从AB包加载和卸载资源等功能。这些AB包作为可独立分发的文件,能单独下载替换,从而实现游戏资源的增量更新。
2、Lua
负责实现脚本热更新。为什么用Lua呢?因为C#本身是一种静态编译语言,它的代码在编译时会被转换成机器码,然后才能被计算机执行。这种静态编译的特性使得C#在运行时无法直接修改已编译的代码。而Lua是一种动态脚本语言,它的代码在运行时会被解释器逐行执行,不需要进行静态编译。这种动态性使得Lua可以使用新的外部脚本替换原有业务逻辑,实现热更新。其次,Lua脚本可以作为文本资源被打包成AB包,因此Lua结合AB包使用起来非常方便。
3、xLua
一种Lua热更新的框架,是由腾讯维护的一个开源项目,当然还有很多其他的热更新方案,感兴趣可以去了解和学习。
xLua简单理解就是可以帮我们在Unity里执行Lua代码,以便使用Lua进行开发。框架提供了 Lua 运行虚拟机,用于执行 Lua 的逻辑,而且实现了 C# 与 Lua 互相调用,是实现 Lua 热更的底层桥梁。
三、热更新流程
上节我们学习了如何实现热更新,了解热更新所需要学习的内容,但是目前这些只能让我们知道如何打包、如何用lua开发。关于如何上传下载AB包,如何更新AB包这些我们是不知道的,因此接下来我们将简单了解热更新的流程,对于具体代码如何实现,后续文章会继续讲解,这里对其有个印象即可。
1、打包与上传
- 打包:对游戏美术资源、Lua 脚本进行修改之后,打成AB包,同时会生成一份资源对比清单。
- 上传:将生成得AB包和资源对比清单文件上传到资源服务器。
2、客户端更新流程
- 版本号校验:客户端本地的游戏版本和服务器的版本做对比,若版本号不同,则进行更新,即进行下面的流程。
- 下载对比文件:从资源服务器下载最新的资源对比清单文件。
- 比对资源差异:将服务器最新清单和本地旧清单对比,筛选出新增加、内容改动过的AB包。
- 下载:对筛选出的变更AB包进行下载,若文件压缩过则进行解压。
- 覆盖:确认所有资源下载完整无损坏后,用服务器最新清单覆盖本地旧清单,完成本次更新。
3、客户端运行
更新流程结束后,游戏就会读取本地更新后的 AB 包,加载其中Lua脚本与美术资源,运行最新游戏内容。