动态下载
目的
* 减少包体容量
* 支持英雄等数据的热更新
支持下载的类型
名称 | 类型 | 路径 | 备注 |
---|---|---|---|
英雄立绘 带动画 | Prefab | /Resources/Prefab/HeroAnim/ | 最主要的更新内容 |
怪物立绘 带动画 | Prefab | /Resources/Prefab/MonsterAnim/ | 同上 |
战斗地图 远景/地面 | Sprite | /Textures/Map/Resources/ | 后期地图 |
战斗技能 | Prefab | /Resources/Prefab/UI/Variant/ | 注意引用关系 |
常规图标 | Sprite | 待定 | 待定 |
UI预置体 | Prefab | 待定 | 待定 |
工作流
数据准备
填写原型表 ab_config
Windows→AssetBundleBrower
通过Unity 自带的插件AssetBundleBrower,添加需要热更新的数据
可以添加目录或者单个文件,打包信息记录在 目录或者文件的meta文件中,注意上传
针对平台选择Build,输出目录选 AssetBundles\StandaloneWindows 这样的(对应的有iOS和Android)
输出成功以后选择工具(UIGen→UIGenTools)
* 1 AB更新ab_config
读取输出目录中的assetbundle文件和manifest文件,把文件的hash和size更新到ab_config对应平台的对应字段中
* 2 AB拷贝和上传
将 Client\UnlimitedPuzzle\AssetBundles\ 下的内容,全部同步到 \Server\PHP\Upload\中
并执行svn的commit指令,等待用户确认添加之后上传。
* 3 AB清除打包文件
按照ab_config中的 bundle_folder来清理需要热更新的资源。
此步骤只在本地测试和BuildMachine做版本之前执行,不要把删除的结果上传服务器。
数据读取
* UIFeatureCommon.SafeSetIcon 主要处理找不到图片的时候,尝试从ab文件中下载读取的情况
* UIPool.LoadJob 主要处理找不到预置体的时候,尝试从ab文件中下载读取的情况
* ABManager有一整套流程进行AB下载
1/ 判断 文件是否在ab_config中
2/ 判断 AB包是否被加载,有则直接读取
3/ 从网络或者缓存 读取 AB包,如果没在缓存,需要标记下载数量
4/ 下载以后异步使用,同步使用的可以先使用Preload的方法,把预置体放到池里
问题和代办事项
1/ BuildMachine 集成,至少做到清理,如果把 打包/更新ab_config/上传服务器 步骤做了更佳
2/ 下载尺寸显示,目前只在MaskBattleLoad页面显示了目前正在队列中还未下载完成的文件容量,下载速度还没计算。另外下载也不是总大小,而是当前步骤堆积在网络中的大小。 可以考虑先堆积在队列中 (低优先)
3/ ab_config 和 AssetBundleBrower的集成配合,目前是各自独立工作,可以考虑通过ab_config自动完成 AssetBundleBrower中的配置(低优先)
4/ 缓存避免下载问题。PC上 Caching.IsVersionCached 永远取不到值,怀疑缓存并没有生效
5/ 缓存清理问题,网上的介绍可以通过现在Cache的尺寸,客户端有指令CleanCache进行测试
6/ AB卸载,目前只在退出战斗执行