Version: 6000.3
语言: 中文
将资产构建到 AssetBundle 中
AssetBundle 文件格式参考

AssetBundle 压缩格式

AssetBundle 文件是一种存档格式,包含以下结构:

  • 一个小的标头数据结构。这永远不会被压缩。
  • 包含其虚拟文件的内容部分,您可以选择压缩这些文件。

您可以压缩以下格式的 AssetBundle 文件:

默认情况下,Unity 使用 LZMA 压缩内容部分,并使用 LZ4 缓存 AssetBundle。

由于不同的数据压缩时节省的大小不同,因此最佳做法是使用每个受支持的选项重新生成项目并测量大小差异。

如果使用自定义缓存解决方案下载和存储数据,则可以使用AssetBundle.RecompressAssetBundleAsync更改压缩一种存储数据的方法,可减少所需的存储空间量。请参阅纹理压缩动画压缩音频压缩构建压缩
请参阅术语表
,例如,在下载后将 LZMA 格式的 AssetBundles 转换为未压缩或 LZ4 格式。

注意:如果您使用 Addressables 系统,则可以在 Unity 编辑器的组设置中设置压缩格式检查器一个 Unity 窗口,显示有关当前选定游戏对象、资产或项目设置的信息,允许您检查和编辑值。更多信息
请参阅术语表
.有关更多信息,请参阅可寻址对象文档

LZMA 压缩

LZMA 将 AssetBundle 文件的整个内容部分压缩为单个流。这种完整内容方法使文件大小比基于块的 LZ4 压缩更小。LZMA 是从内容分发网络 (CDN) 下载的 AssetBundle 的首选格式。

但是,您必须将整个文件解压缩到 RAM 中才能从使用 LZMA 压缩的存档中读取资产。当 AssetBundle 包含要一次性加载所有资源时,此方法效果最佳。例如,打包角色的所有资产或场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,你放置你的环境、障碍物和装饰品,基本上是将你的游戏设计和构建成碎片。更多信息
请参阅术语表
在一个 AssetBundle 中。

LZMA 是调用时使用的格式BuildPipeline.BuildAssetBundles例如,未指定特定压缩BuildAssetBundleOptions.None.

注意:Web 平台不支持 LZMA 压缩。请改用 LZ4 压缩。有关更多信息,请参阅Web中的资产包

LZ4 压缩

LZ4 使用基于块的算法,以块形式解压缩 AssetBundle。在编写 AssetBundle 时,Unity 会在保存之前单独压缩每个 128 KB 的内容块。这种方法意味着 AssetBundle 文件的总大小大于 LZMA 压缩。但是,您可以有选择地仅检索和加载请求对象所需的块,而不是解压缩整个 AssetBundle。

LZ4 的加载时间与未压缩的捆绑包相当,并具有减小磁盘大小的额外好处。这是 AssetBundle 缓存首选的格式,对于作为安装的一部分分发的 AssetBundle 或在大小不重要的其他情况下,它也是一个不错的选择。

若要使用此格式,请指定标志BuildAssetBundleOptions.ChunkBasedCompression调用时BuildPipeline.BuildAssetBundles.

未压缩格式

您可以构建 AssetBundle,以便数据完全未压缩。这会创建更大的文件下载大小,但下载后加载时间更快,因为不需要解压缩。如果只有几个对象从较大的 AssetBundle 中加载,则未压缩的 AssetBundle 会很有用。

未压缩的 AssetBundle 以 16 字节对齐。要构建未压缩的 AssetBundle,请指定标志BuildAssetBundleOptions.UncompressedAssetBundle调用时BuildPipeline.BuildAssetBundles.

其他资源

将资产构建到 AssetBundle 中
AssetBundle 文件格式参考