-
Notifications
You must be signed in to change notification settings - Fork 0
UpdateModule
website0207 edited this page Jun 5, 2020
·
4 revisions
本模块用于游戏热更时资源的下载与更新,并对整个流程进行了拆解以便于根据需求进行拓展。 本模块利用全部资源的清单文件(catalog.json)对所有更新文件的本地/远程地址进行下载和写入操作。通过版本号与文件的MD5值来判断是否更新。 流程中已经留出event用于关键节点的回调,也可以根据需求自行添加。 考虑到目前安卓和ios均默认限制了明文通信,cdn地址目前均采用https协议。目前模块中采用直接验证通过的办法以便于内网劫持测试。
- LocalProcedure 本地数据校验阶段。读取真机包中的_version.json_与_catalog.json_文件获取当前版本,并获取远程version文件、catalog文件、服务器列表、公告信息地址。
- RemoteProcedure 远程数据校验阶段。通过上一阶段中的url,下载version、服务器列表、公告
- ConfirmDownloadProcedure 版本校验阶段。对比版本号,如果本地版本号小于远程版本号,进行更新;否则直接完成整个更新模块。
- DownloadCatalogProcedure 下载catalog阶段。确定当前本地版本较低时,进行catalog下载,并将其缓存。(将catalog分离出去的原因在于catalog是对全体可以热更的文件的记录,大约有3~5MB。如果每次进入游戏都重新下载的话,代价较大。)
- AnalyzeCatalogProcedure 对比catalog阶段。分三种情况:
- 更新资源:取新-旧catalog的并集并比对MD5值,不同则需要下载。
- 新加资源:取新-旧catalog的差集,其结果需要下载。
- 删除资源:取旧-新catalog的差集,其结果需要删除。
- DownloadAssetsProcedure 下载asset阶段。下载基于UnityWebRequest,采用多个协程进行下载。协程数根据经验限制在100以下。下载成功后将远程的version和catalog文件保存在本地。考虑因故未能一次下载完成的情况,该阶段会对先校验对应文件是否已经事先下载完成,以减少下载量。
- NoUpdateFinalProcedure 更新完成阶段。如果不需要更新或者文件已经事先下载完成但是未同步version和catalog文件的情况,校验之后直接进入该阶段。
为方便生成资源的version与catalog文件,基于python实现的可视化工具 清单文件生成工具 使用时按照如下流程进行操作:
- 正确填入各个空白格,其中各项信息解释如下:
- platform:渠道名,eg:安卓官包、安卓渠道包、ios官包就是三个渠道
- version:版本号,格式为x.y.z
- versionurl:远程version文件的索引地址
- catalogurl:当前最新版本远程catalog文件的索引地址
- cdn1:资源文件下载root地址,注意url结尾不要有"/"
- cdn2:资源文件下载备用root地址,注意同上
- serverlist:服务器列表文件下载地址
- announcement:公告文件下载地址
- 选择正确的资源文件夹根目录
- 如果为第一次生成,点击generate按钮即可,生成的文件位于资源根目录的同级文件夹中
- 如果为生成更新包,还需点击Process Last Catalog按钮以导入catalog文件。在信息填写正确的情况下,点击Generate,会生成catalog与version文件。同时也会拷贝出一份相同相对路径的差异文件集。
what is this?
sidebar??