Version: 6000.3
语言: 中文
AssetBundle 压缩格式
从AssetBundles加载资产

AssetBundle 文件格式参考

当您使用BuildPipeline.BuildAssetBundles构建 AssetBundle,Unity 会将以下文件写入指定的输出目录:

注意:如果使用 Addressables 包构建 AssetBundle,它会生成一个 AssetBundle 文件,但不会生成清单文件或清单包。

存档文件格式

Unity 存档文件格式是一种通用打包格式,可以存储任何类型的文件,类似于 .zip 文件。存档文件被挂载到 Unity 的虚拟文件系统中,这使得它们可以在不同平台上以统一的方式访问。

存档格式用于 AssetBundle,其中存档文件是作为 AssetBundle 构建过程的最后阶段创建的。加载 AssetBundle 时,它们会挂载到 Unity 虚拟文件系统中。

存档格式也用于使用 LZ4 构建的播放器压缩一种存储数据的方法,可减少所需的存储空间量。请参阅纹理压缩动画压缩音频压缩构建压缩
请参阅术语表
,在这种情况下,存档将在 Player 运行时自动挂载。有关更多信息,请参阅BuildOptions.CompressWithLz4API 文档

在大多数情况下,您不需要在低级别与存档进行交互,并且应该使用AssetBundleAPI 或 Addressables 包。但是,有关如何使用低级 API 直接管理存档文件的更多信息,请参阅ArchiveFileInterfaceAPI 文档。

AssetBundle 文件

AssetBundle文件是一个存档文件,其中包含多个文件,这些文件在运行时加载到资产中。下图包含 AssetBundle 文件布局的示例:

  • 它包含一系列容器,其中最外层是与 AssetBundle 同名的存档文件系统的实例。
  • ArchiveFileSystem有两个容器:
    • 主要SerializedFile,它表示 Unity 序列化文件格式的主 AssetBundle 文件。它包含 AssetBundle 对象以及 AssetBundle 中包含的所有资产(显式或隐式)中的对象。
    • 音频资源中的.resource格式。所有音频或视频都存储在.resource格式,纹理存储在.resS格式。
典型 AssetBundle 文件的内部结构,描述为一系列容器。
典型 AssetBundle 文件的内部结构,描述为一系列容器。

内容场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,你放置你的环境、障碍物和装饰品,基本上是将你的游戏设计和构建成碎片。更多信息
请参阅术语表
AssetBundle 类似,但它针对单个场景的流加载进行了优化。它包含两个SerializedFile每个场景的实例。

检查 AssetBundle 文件内容

在某些情况下,你可能希望直接查看资产包文件,或比较两个资产包的内容。

Unity 编辑器安装包括WebExtractBinary2Text可执行文件。您可以使用WebExtract以提取嵌套在 AssetBundle 中的文件,类似于提取 zip 文件。您可以使用Binary2Text生成二进制文件内容的文本格式转储SerializedFile.其输出类似于 Unity 使用的 YAML 格式。

您还可以使用UnityDataTools使用dump参数来查看 AssetBundle 的 SerializedFile 的内容。

序列化文件的原始内容通常技术性很强且很大,尤其是当它包含着色器在 GPU 上运行的程序。更多信息
请参阅术语表
、网格或二进制数据。但是,这些转储可用于查明文件中特定对象的问题。使用差异工具比较两个相似资产包的提取内容可以帮助识别差异。

清单文件

对于生成的每个 AssetBundle,Unity 都会生成一个关联的清单文件。清单文件的扩展名为.manifest您可以使用任何文本编辑器打开它。

它包括以下内容:

以下是 AssetBundle 清单文件内容的示例:

ManifestFileVersion: 0
UnityVersion: 6000.2.0a6
CRC: 4208470199
Compression: None
Hashes:
  AssetFileHash:
    serializedVersion: 2
    Hash: 81197c4674c1f389b3568a0aa1b41119
  TypeTreeHash:
    serializedVersion: 2
    Hash: 3c2131fb3360d17991621f547033218e
  IncrementalBuildHash:
    serializedVersion: 2
    Hash: 489e266cfc1b361a94c3efc39afecb54
HashAppended: 0
ClassTypes:
- Class: 1
  Script: {instanceID: 0}
- Class: 4
  Script: {instanceID: 0}
SerializeReferenceClassIdentifiers: []
Assets:
- Assets/Scenes/Scene2.unity
- Assets/Scenes/SampleScene.unity
Dependencies:
- C:/MyBuild/audio.bundle
- C:/MyBuild/sprites.bundle

Unity 使用.manifest文件执行构建时,Unity 会检查现有的 AssetBundle 和.manifest文件,以确定资产包是否需要重建或可以重复使用。如果您删除.manifest文件,则 Unity 始终从头开始重建 AssetBundle。

加载 AssetBundle 不需要清单文件,因此您无需分发它们。

清单捆绑包

Unity 还生成一个清单包,这是一个以它所在的目录命名的 AssetBundle 文件。它包含AssetBundleManifest对象,Unity 使用它来确定在运行时加载哪些捆绑包依赖项。

生成还生成了两个附加文件。

第一个是一个小型 AssetBundle,以它所在的目录(构建 AssetBundle 的位置)命名。这个文件称为Manifest Bundle它包含 AssetBundleManifest 对象,该对象对于确定在运行时加载哪些捆绑依赖项非常有用。有关如何使用此捆绑包的信息,请参阅从捆绑包加载资产。

清单包还包括自己的.manifest文件。下面是清单包的清单文件示例:

ManifestFileVersion: 0
AssetBundleManifest:
  AssetBundleInfos:
    Info_0:
      Name: scene1assetbundle
      Dependencies: {}

.manifest清单包的文件记录了资产包的关系以及它们的依赖关系。此信息类似于AssetBundleManifest对象。

清单文件对于防止您在 AssetBundle 中使用的未使用的类型的代码剥离非常重要。如果您在项目中启用了代码剥离,请将BuildPlayerOptions.assetBundleManifestPath在执行玩家构建时传递到此清单的路径。

构建报告

AssetBundle 构建还会生成一个BuildReport文件,该文件是 UnitySerializedFile写给Library/LastBuild.buildreport在项目目录中。此文件可用于查看构建步骤的计时摘要和资产包内容的详细视图。您可以使用BuildReportAPI 从BuildReport文件。

您还可以使用以下工具查看BuildReport文件:

其他资源

AssetBundle 压缩格式
从AssetBundles加载资产