赞
踩
游戏上线后,难免会有一些测试阶段没发现的bug,bug这东西,可大可小。如果没有热更,更新一点问题就需要玩家去商店下载新包的话,那造成的流失是非常可怕的。而如果有热更,可能我们在发现问题的当天,就可以发布一个小包将问题修复了。
一款游戏的内容总的来说就是资源、配置和代码。我们要热更的也就是这些东西。unity提供可以热更的方案就是AssetsBundle。资源、代码、配置都可以打成AB包,放到服务器上,然后比对版本,进行热更。
接下来便要尝试代码热更新,让程序下载服务器上的lua文件,然后运行它。在说明热更新之前,需要先看看Unity3D热更新的一般方法。Unity3D的热更新会涉及3个目录。如下图所示
游戏资源目录:里面包含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)。
接下来讲一下热更的基本流程:
热更分成2部分
一、导出热更资源;
二、游戏流程热更
更新注意:
1. 要有下载失败重试几次机制;
2. 要进行超时检测;
3. 要记录更新日志,例如哪几个资源时整个更新流程失败。
这边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热更新以及版本管理的解决方案
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。