一.写在前面
通过AssetBundle进行资源管理很方便.AssetBundle的打包与加载策略有很多种,本文来讲一种可以随意通过资源名来加载指定目录下资源的打包方法.意在加深对资源管理的理解.
二.策略介绍
1.打包的粒度划分的策略
① 所有在指定目录下的文件,即RootList,都被打包成单独结点
② 对于RootList所依赖的所有资源,即DepList,依赖数大于1的,被打包成单独结点,等于1的,向上合并至被依赖结点.
③ 记录打包信息
2.下载策略
① 下载配置文件
② 更新AssetBundle文件
3.加载的策略
① 资源所对应的Hint不存在,报告不存在异常,若存在转下
② Hint引用数增加,依赖的Hint引用数增加
③ 若Hint内Bundle为空,加载Bundle,并加载依赖的Hint中未加载的Bundle
④ 若Hint内MainAsset为空,加载MainAsset
⑤ 返回Hint内MainAsset
4.释放策略
① 资源所对应的Hint不存在,报告不存在异常,若存在转下
② 所有依赖的Hint引用数减1,对应的Hint引用数减1
③ 若Hint为引用数为0时, 置空MainAsset,并对Bundle调用Unload(true)
三.注意
1.AssetBundle在加载自身内Asset时,需要保证所以来的资源都在此Bundle内或者在其它被加载上来的AssetBundle中才能保证加载完全正确.
2.打包资源时可以要有过滤,将不打包的的类型或者指定资源滤出.
3.可拓展:记录文件MD5变化,进行增量打包.
4.本方式可以最大程度上减少AssetBundle的加载资源内存占用,但是会增加AssetBundle数量.
四.源码