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 获取平台支持的纹理压缩格式。