【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压缩、未压缩资源。

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