【Unity优化】资源管理系列05:AssetBundle 常见问题

1、资源重复

1)资源打包进哪个AB,由三种方式决定

① 在Editor中被明确指定AB名称:只打进指定名称AB中

② 通过BuildPipeline方法指定AB名称:只打进指定名称AB中,且覆盖方法①

③ 没有指定AB名称:任何引用该资源的AB包,都将包含一份该资源的复制

2) 没有指定AB名称细节

① 资源的多份复制被打包进不同AB后,每份复制被视为不同的资源,各自具有单独的ID

② 缺点:加载包含相同资源的不同AB时,导致该资源占用多份内存空间

3)解决方案

① 确保不同AB间没有依赖,把有依赖的资源打包进同一个AB。

限制:产生大AB,一旦有资源要更新,就要更新整个AB;不适用于资源依赖较多的项目

② 确保依赖同一个资源的AB不会同时被加载。

限制:适用于关卡类游戏;同样会产生大AB

③ 将被依赖的资源各自单独打包成AB。

限制:能够完全避免资源重复,但是增加了维护复杂性,确保加载AB前加载好相关依赖

4)编写Editor AB检测工具

① AssetDatabase.GetDependencies():获取资源的直接依赖

② AssetImporter:查找某个资源被分配给哪些AB

2、图集重复

0)一个图集(sprite atlas,SA)生成包含多个精灵对象(sprite object,SO)

1)如果SO被分配给多个AB:SA不会被单独打包为AB,而是被复制多次打包进多个AB

2)如果SO没有分配AB:SA也不会被单独打包为AB

3)所有SO分配同一个AB:SA被单独打包为该AB

3、安卓纹理

1)安卓碎片化严重,因此纹理需要不同的压缩格式。

2)所有安卓设备都支持 ETC1 纹理格式,但是该格式不支持透明通道。

3)ETC2 格式支持透明通道,但是需要 OpenGL ES3 以上支持。

4)针对不同的AB变体,更改导入器设置,打包不同的纹理格式。

5)使用 SystemInfo.SupportsTextureFormat 获取平台支持的纹理压缩格式。

posted @ 2020-07-21 22:38  何三思  阅读(546)  评论(0编辑  收藏  举报