【Unity优化】资源管理系列06:AssetBundle 变体与压缩
作用:针对不同的运行时环境,使用不同的内容。
一、变体
1、使用举例
1)不同目标平台,简化对应AB加载
举例:一个AB包含用于PC平台的高清纹理,另一个AB包含用于安卓手机的低清纹理,但是他们使用相同的AB名和资源名,只有变体名不同。于是在运行时,不需要更改加载代码,就可以加载对应的AB变体。
2)相同目标平台,根据不同硬件规格,加载不同AB
举例:不同的硬件规格包括性能差异、屏幕宽高比、分辨率等。
2、限制
1)不同的变体必须对应不同的资源
举例:就算一张纹理的两个变体只有压缩方式不同,这张纹理也必须复制两份,各自单独设置变体名。
缺点:增加大型项目的资源管理复杂度;如果要更新,所有版本的资源都要更新,unity 没有提供直接的解决方案。
2)自己实现AB变体
① 通过给资源名添加有意义的后缀,来识别特定的AB变体。
② 通过程序,根据后缀更改导入器的设置,或者更改预设上所挂载组件的参数。
二、是否压缩
1、是否压缩的对比
① 加载时间:从内存加载AB时,加载未压缩的比压缩的快。
② 打包时间:使用LZMA和LZ4格式压缩文件很慢;而Unity又是连续压缩AB,如果AB很多,压缩处理会占用很长时间。
③ 应用大小:压缩AB包将减少应用包大小。
④ 内存占用:使用LZ4压缩格式,或未压缩,内寸占用相对较少。
⑤ 下载时间:如果AB包较大,或用户网络带宽较小,建议压缩;如果AB包只有小几十兆,且用户网络带宽大,比如面向PC平台,则可以不压缩。
2、Crunch 压缩
如果AB中大部分是采用 Crunch 压缩算法压缩过的DXT纹理资源,则打包时不应该再被压缩(该算法应该也支持ETC格式,优点是压缩比高,缺点是压缩时间长)。
三、AB 与 WebGL
1、因为 WebGL 不支持工作线程,因此解压缩工作发生在主线程。
2、建议使用小尺寸AB包,缓解性能压力。
3、WebGL 只支持 LZ4压缩、未压缩资源。