动态下载
目的
* 减少包体容量
* 支持英雄等数据的热更新
支持下载的类型
名称 | 类型 | 路径 | 备注 |
---|---|---|---|
英雄立绘 带动画 | Prefab | /Resources/Prefab/HeroAnim/ | 最主要的更新内容 |
怪物立绘 带动画 | Prefab | /Resources/Prefab/MonsterAnim/ | 同上 |
战斗地图 远景/地面 | Sprite | /Textures/Map/Resources/ | 后期地图 |
战斗技能 | Prefab | /Resources/Prefab/UI/Variant/ | 注意引用关系 |
常规图标 | Sprite | 待定 | 待定 |
UI预置体 | Prefab | 待定 | 待定 |
工作流
数据准备
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/ 下载以后异步使用