GameFramework篇:资源热更新讲解
资源热更新步骤
准备工作:
StarForce dev/Update分支 https://github.com/EllanJiang/StarForce/tree/dev/Update 注意下载子库
** HFS的下载,作为文件服务器 http://www.rejetto.com/hfs/?f=dl**
在这个分支里,E大已经写好了完整的更新流程
具体细节就是
ProcedureCheckVersion流程
声明更新版本更新配置表回调函数
订阅添加WebRequest任务请求的成功与失败事件
添加WebRequest任务请求
添加WebRequest任务请求成功,执行订阅的事件,反序列化为VersionInfo类(包含版本信息以及更新细节),如果为强制更新,就跳转到下载网页下载船新客户端(你没有体验过得船新版本),如果为热更新,就配置下载文件地址,校验本地客户端和下载到的版本资源列表版本号,如果一致,说明不用更新,直接进入下一流程,如果不一致,说明需要更新版本资源列表,更新成功后,进入下一流程。
ProcedureUpdateResource流程
初始化相关数据,检查资源,并设置回调函数
设置更新数量和更新的zip文件长度,如果不需要更新进入下一流程,如果需要更新,先判断用户是否处于移动网络,如果是弹出对话框 询问是否更新,如果不是(说明在用WIFI咯),就直接进行更新
** 开始更新资源,并安排好进度条**
更新完毕,进入下一流程
先来捋一遍思路
首先,Full目录下的资源是Unity打出来的AssetBundle经过加密(如果选择了Load from memory and Decrypt或quick Decrypt)和Zip压缩(如果选择了Zip压缩)后,加上资源的hashcode在加上了一个dat后缀生成的。其中version.dat中记录了每个AssetBundle的原始大小,原始HashCode,压缩成Zip后的大小及Zip包的HashCode,你本地的AssetBundle的HashCode与服务器上的进行对比,如果不一致就需要更新,Zip包的HashCode是干啥的呢,因为你从服务器上下的资源是Zip压缩后的,资源下载下来后,需要计算你下载下来的这个资源的HashCode与服务器上这个资源的ZipHashCode做一个对比,不一致就说明你下载出错了,这个资源不能用。然后解压后,也需要将解压后计算得到的HashCode与服务器上的对比,ZipHashCode和解压后的HashCode都一致这个AssetBundle才能用。
version.hashcode.dat这个文件是放在服务器上的,做资源更新时,你首先就好获取这个文件,那么这个文件你怎么校验呢,这就到了BuildLog.txt(他在打包路径的BuildReport文件夹里
)这个文件。
GameEntry.Config.BuildInfo.CheckVersionUrl是在Assets\GameMain\Configs\BuildInfo.txt中设置的,CheckVersionUrl指向版本信息配置表version.txt,是由BuildLog.txt来的,于是乎我们也创建这样一个version.txt放到我们自己的服务器上。
因为这个文件的URL是从Assets\GameMain\Configs\BuildInfo.txt中获取的,所以这个文件也要改,把CheckVersionUrl指向你自己服务器上的version.txt。
具体操作
1.打AB包,比当前版本高一版本即可(默认为1,但是我打过一次了,所以当前版本为2,所以我要打版本为3的AB包)
2.添加AB文件到HFS
4.配置文件
新建version.txt文件,注意VersionListLength,VersionListHashCode,VersionListZipLength,VersionZipHashCode要对上BuildLog.txt的数值
拖到HFS
更改BuildInfo.txt,关键是CheckVersionUrl要配置好,其余的随意
OK,运行游戏
参考:QQ:471812771(李春)