BLOG

AssetBundle序列化文件分析

前言

AssetBundle 在被加载后,不管通过何种方式加载,都会创建一个 AssetBundle 的 SerializedFile。 本文尝试对其 Size 受那些因素影响进行分析。

案例分析

资源大小

分别创建两个大小不同的贴图 Texture1 和 Texture2 分别打进 texture1 和 texture2 两个 ab 包中,加载后对比 Size

AssetBundleTextureSizeFileSizeChangeSize
texture1512 x 51218.0 KB——
texture21024 x 102418.0 KB0KB

两者没有变化,File 不受原始素材大小影响

Shader 类型

创建创建使用两个不同 Shader 的 Material, 加载后对比

AssetBundleShaderFileSizeChangeSize
mat1Standard123.9 KB——
mat2Legacy123.9 KB0KB

两者没有变化,File 不受 Shader 类型影响

多个 Assets

AssetsFileSize
texture118.0 KB
texture218.0 KB
mat1123.9 KB
mat2123.9 KB
texture1 + mat1125.2 KB
texture1 + texture2 + mat1 + mat2125.3 KB

FileSize 只受包内 Asset 类型的影响与数量无关

组件类型

创建多个 prefab 并,组个增加不同的组件,进行对比

AssetBundleComponent ChangeFileSizeChangeSize
prefab1+ GameObject18.3 KB——
prefab2+ MeshColider19.0 KB0.7 KB
prefab3+ capsule91.0 KB72 KB
prefab4+ MeshRender92.7 KB1.7 KB
prefab5+ mat292.8 KB0.1 KB
prefab5capsule -> cube92.8 KB0 KB
prefab5+ mat192.8 KB0 KB
prefab5+ MonoScript1 (2 kb)94.7 KB1.9 KB
refab5+ MonoScript2 (1 kb)95.3 KB0.6 KB
  1. 每次增加新的组件都会增加 Size
  2. 资源的引入
    • capsule 资源的引入增加了大量 Size 变化
    • capsule 替换成 Cube 并没有 Size 变化

    新增类型的引入造成了 Size 的变化。

  3. AssetBundle 资源引入
    • mat2 bundle 内容的资源引入增长量与mat2 bundle 的 FileSzie 不相符
    • 再次引入相同类型的资源 mat1 , 未增长

    Bundle 类型的引入对 Size 影响非常小,且不受数量影响

  4. 引入 MonoScript
    • Scirpt 每次引入都会增长 Size
    • Size 的增长与引入脚本的大小正相关

总结

AssetBundle 加载后创建的 SerializeFiled 受包体内资源类型的数量影响,Asset 的资源类型数量有限,并不会无限增长。需要注意的是 FileSize 的大小与 MonoScript 的大小,数量正相关,需要在打包时关注。