unity 解包_【Unity游戏客户端框架搭建】五、热更新

前言

游戏上线后,难免会有一些测试阶段没发现的bug,bug这东西,可大可小。如果没有热更,更新一点问题就需要玩家去商店下载新包的话,那造成的流失是非常可怕的。而如果有热更,可能我们在发现问题的当天,就可以发布一个小包将问题修复了。

热更新的原理

一款游戏的内容总的来说就是资源、配置和代码。我们要热更的也就是这些东西。unity提供可以热更的方案就是AssetsBundle。资源、代码、配置都可以打成AB包,放到服务器上,然后比对版本,进行热更。

接下来便要尝试代码热更新,让程序下载服务器上的lua文件,然后运行它。在说明热更新之前,需要先看看Unity3D热更新的一般方法。Unity3D的热更新会涉及3个目录。如下图所示

358053e47529fbb65c6143982c99bc04.png

游戏资源目录:里面包含Unity3D工程中StreamingAssets文件夹下的文件。安装游戏之后,这些文件将会被一字不差地复制到目标机器上的特定文件夹里,不同平台的文件夹不同,如下所示(上图以windows平台为例)

Mac OS或Windows:Application.dataPath + "/StreamingAssets";
IOS: Application.dataPath + "/Raw";
Android:jar:file://" + Application.dataPath + "!/assets/";

数据目录:由于“游戏资源目录”在Android和IOS上是只读的,不能把网上的下载的资源放到里面,所以需要建立一个“数据目录”,该目录可读可写。第一次开启游戏后,程序将“游戏资源目录”的内容复制到“数据目录中”(步骤1,这个步骤只会执行一次,下次再打开游戏就不复制了)。游戏过程中的资源加载,都是从“数据目录”中获取、解包(步骤3)。不同平台下,“数据目录”的地址也不同,LuaFramework的定义如下:

Android或IOS:Application.persistentDataPath + "/LuaFramework"
Mac OS或Windows:c:/LuaFramework/
调试模式下:Application.dataPath + "/StreamingAssets/"

网络资源地址:存放游戏资源的网址,游戏开启后,程序会从网络资源地址下载一些更新的文件到数据目录。

这些目录包含着不同版本的资源文件,以及用于版本控制的files.txt。Files.txt的内容如下图所示,里面存放着资源文件的名称和md5码。程序会先下载“网络资源地址”上的files.txt,然后与“数据目录”中文件的md5码做比较,更新有变化的文件(步骤2)。

4cc58f95ab762e876ea6bd7ef471a4df.png

热更新的基本流程

接下来讲一下热更的基本流程:

热更分成2部分

一、导出热更资源;
二、游戏流程热更

2.1、导出热更资源

  1. 打包热更资源的对应的md5信息(涉及到增量打包)
  2. 上传热更ab到热更服务器
  3. 上传版本信息到版本服务器

2.2、游戏流程热更

  1. 启动游戏
  2. 根据当前版本号,和平台号去版本服务器上检查是否有热更
  3. 热更服务器上下载md5文件,比对需要热更的具体文件列表
  4. 热更服务器上下载需要热更的资源,解压到热更资源目录
  5. 游戏运行加载资源,优先到热更目录中加载,再到母包资源目录加载

更新注意:

1. 要有下载失败重试几次机制;
2. 要进行超时检测;
3. 要记录更新日志,例如哪几个资源时整个更新流程失败。

3. md5信息

4445a5426810080657124835ed863d4d.png

39fdc58c4e1b0b9d31e1eecec44d8132.png

这边md5文件存了信息,分别是ab路径、MD5值、未压缩文件大小、压缩文件大小。

4. 版本号管理

客户端版本号我们是4位来标识,假设是X.Y.Z.W,厦门是XYZW值对应的意义:

X:【巨大版本号】这一位其实就是1,没事一般不会动他,除非有太巨大的变化,目前反正还是1;
Y:【整包更新版本号】:我们游戏一般一个月会有一个比较大的版本迭代,这种版本会走商店,每次提交Y值+1;
Z:【服务器协议版本号】,一个月度版本周期内,万一SDK有问题或者C#层有发现bug,需要更新商店,这一位会+1,这里单独留一个Z处理这种商店版本号,是因为不想影响Y值,而商店提交新包要求版本号必须有增加,buildNum也是商店要求必须要升的;
W:【编译版本号热更版本号】,每次热更都+1 。
【第2位加1之后,3、4位全部清0】

比如目前商店版本号是1.1.0.0,这个版本我们热更了3次后,版本号就变成1.1.0.3,这时候发现好像C#层有一点bug必须要修复,那打一个1.1.1.3提交商店,1.1.1.3包里的资源和1.1.0.3的资源是一模一样的,这之后如果有第4次热更,那热更包的版本号就是1.1.1.4。

后面在说到检测热更的时候会用到以上版本号信息。

参考:

具体实践见:ToLua热更新之LuaFramework框架之代码热更新(一)_居安思危,游戏人生。-CSDN博客

这里推荐芳芳大佬写的热更课程,学到蛮多东西。成熟的Unity热更新以及版本管理的解决方案

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值