针对传统 AssetBundle 内存占用高、启动慢的问题,本方案通过多格式纹理压缩与动态加载技术,将纹理资源分离至云端并按需加载,实现资源加载效率与渲染性能的双重优化;
注意:插件需要升级>=30版本。
压缩纹理工具将纹理资源从 Bundle 中分离单独托管,因此 Bundle 体积将变小,这有助于加快游戏运行进度。对于被分离的纹理资源将在游戏实际的使用过程中按渲染需要动态加载。
使用压缩后的纹理本身将节约更多的内存空间,这对于内存吃紧的游戏至关重要。压缩纹理工具将对同一个纹理资源生成多种不同格式的压缩纹理(如 ASTC、DXT……),在游戏运行中如需按需加载,根据实际运行设备 GPU 下载可被识别的压缩纹理。对于资源体积而言将更小,由 GPU 实现硬件解码,效率更高。
此工具并未覆盖所有 Unity 的大版本, 为了确保压缩纹理工具的顺利进行,建议开发者根据 年份大版本 的基础上选用我们已经验证可行的 Unity 版本,如下表格所示,使用其他版本需要自行测试:
| 平台 | Unity 编辑器版本 |
|---|---|
| window | 2019.4.29f1c2、2020.3.10f1c1、2021.2.18f1c1、2021.3.45f1c1、2022.3.53f1c1 |
| mac | 2021.2.18f1[c1]、2021.3.33f1[c1]、2022.3.14f1[c1] |
注意:切换 Untiy 版本后需要重新构建 AssetBundle
项目中若使用 bundle 文件,需先构建 AB 包。请勿开启 crc 对 bundle 进行校验。
纹理资源的 WebGL Settings 的 Format 配置项支持列表:
| Format | 支持情况 | ||
|---|---|---|---|
| R 8 / R 16 bit | 支持 | ||
| RGBA Crunched DXT5\ | BC3 | 不支持 | |
| RGB Crunched DXT1\ | BC1 | 不支持 | |
| RGBA Compressed DXT5\ | BC3 | 支持 | |
| RGB Compressed DXT1\ | BC1 | 支持 | |
| Alpha 8 | 支持 | ||
| RGBA Compressed ETC2 8 bits | 不支持 | ||
| RGB Compressed ETC2 4 bits | 支持 | ||
| RGB Compressed ETC 4 bits | 请勿使用 | 资源占位符专用,全游戏工程请勿使用! | |
| ASTC 请参考配置说明 | - | - | |
| RGB(A) Compressed BC7 | 支持 | ||
| RGBA 32 bit | 支持 |
ASTC 是多数移动设备中游戏运行的主要支持的纹理格式,因此也是微信小游戏环境下主要使用到的压缩的纹理资源。
在 2021 版本 Unity 纹理资源的 WebGL Settings 的 Format 配置项中,工具支持识别 RGB(A) Compressed ASTC 8x8、6x6、5x5、4x4 block 这三种压缩格式,其余格式请勿设置,并且不支持 ASTC HDR 系列的格式。
若以上述 4 种格式配置后,最终生成的多份格式资源中,ASTC 资源将保持对应的 Block Size。值得注意的是,默认推荐使用 Block Size 8x8 格式,4x4 最清晰内存占用也会升高,开发者应根据实际调试后运行效果按需配置。
导出联盟快游戏,并确保小游戏能正常运行。注:无论是使用 AA/AB 方式的按需加载,均需要在插件中配置 cdn 路径


可点击 打开 bundle 配置面板 查看识别情况,并按需忽略部分不希望执行压缩纹理的 bundle 资源,点击 处理资源 开始处理。
调试模式 将只生成 ASTC 格式(开发者工具中使用 PNG 资源,移动设备使用 ASTC 格式资源),调试结束后可再次选用全量模式(默认采用增量逻辑不会额外增加处理时间)
该步骤根据项目实际情况不同,处理时间也会有差异,执行完成后请留意控制台提示信息,不可存在多个警告消息。
处理成功后,在 webgl 同级目录下,生成如下目录 webgl-min,资源上传至 CDN 服务器:

由于纹理压缩工具会修改项目部分配置,因此每次处理资源完成后都需要需要进入 webgl_vivo 重新打包 rpk。
PC 端上预览的时候展示的是 PNG 图片会比较大,手机上用的是带 txt 后缀的,如 astc.txt, 这些文件压缩率很高,注意正式环境 CDN 一定要开启 Brotli 或者 Gzip,这样加载的时候纹理就会很小。速度快很多。建议优先使用 Brotli。
上传至 CDN 时,请注意要按二进制传输,强制 storebinary,如果按文本传输也会出现加载回来的图片成黑色。
压缩纹理工具执行需要依赖 Node.js 解释器,若执行前已安装 Node.js 但执行时提示未找到则需手动填入本机 Node.js 路径。请将 Node.js 的绝对路径填写至 QGAssetsTextTools.cs 文件的 NODE_PATH 变量中。若开发者使用 API 调用执行,可对该变量进行直接赋值。
压缩纹理工具需要使用到部分开源工具的脚本,mac 上可能会报权限相关的错误,如下
Error: spawn /Users/xxx/Assets/VIVO-GAME-SDK/Editor/TextureEditor/Node/astcenc-neon EACCES
at ChildProcess._handle.onexit (node:internal/child_process:286:19)
at onErrorNT (node:internal/child_process:484:16)
at process.processTicksAndRejections (node:internal/process/task_queues:82:21)
chmod -R +x .
因为 Unity 自带 Mono 配置错误 libgdiplus.dylib 文件路径。有两种解决方案选择其一即可。
本地安装官方 Mono 后,代码配置压缩纹理工具用于执行的 Mono 解释器完整路径。
// 在合理的时机进行路径配置:
QGAssetsTextTools.MONO_PATH = "/usr/bin/mono"; // 本机安装的 Mono 解释器完整路径
先下载 libgdiplus.dylib{target="_self"} 文件后,将其放在 UnityEditor /Applications/Unity/Hub/Editor/{$Unity_Editor_Version}/Unity.app/Contents/MonoBleedingEdge/lib/libgdiplus.dylib 路径下,并编辑 /Applications/Unity/Hub/Editor/{$Unity_Editor_Version}/Unity.app/Contents/MonoBleedingEdge/etc/mono/config 文件,将 target= .../libgdiplus.dylib 路径内容均变更为下载文件的存放完整路径,重启 Unity Editor 即可。