先前的“AssetBundle 工作流”部分介绍了如何使用 BuildPipeline.BuildAssetBundles
构建 AssetBundles。该 API 调用将生成过程的成果写入指定输出目录,包括 AssetBundle 文件和每个 AssetBundle 的 .manifest 文件。此部分将介绍生成过程写入的文件的详细信息。
这是不带 .manifest 扩展名的文件,也是将在运行时加载以加载资源的文件。
AssetBundle 文件是包含多个内部文件的存档。这是常规 AssetBundle 的示例结构
主文件使用 Unity 的二进制 SerializedFile 格式。它包含 AssetBundle 对象以及 AssetBundle 中包含(显式或隐式)的所有资源的对象。任何音频、视频内容都将存储在 .resource 文件中,任何纹理数据都将存储在 .resS 文件中。
场景场景包含游戏的环境和菜单。可以将每个独特的场景文件视作一个独特关卡。在每个场景中,你可以放置环境、障碍和装饰,本质上是分批设计和构建游戏。更多信息
请参阅 词汇表 AssetBundle 中的内容类似,但它是针对单个场景的流加载进行了优化。它将包含每个场景两个 SerializedFile。
对于生成的所有 AssetBundle,包括额外的清单包,都会生成关联的清单文件。清单文件具有 .manifest 扩展名,可以用任何文本编辑器打开。它包含的信息,如循环冗余校验 (CRC) 数据和包的依赖项数据。常规 AssetBundles 的清单文件看起来像这样
ManifestFileVersion: 0
CRC: 2422268106
Hashes:
AssetFileHash:
serializedVersion: 2
Hash: 8b6db55a2344f068cf8a9be0a662ba15
TypeTreeHash:
serializedVersion: 2
Hash: 37ad974993dbaa77485dd2a0c38f347a
HashAppended: 0
ClassTypes:
- Class: 91
Script: {instanceID: 0}
Assets:
Asset_0: Assets/Mecanim/StateMachine.controller
Dependencies: {}
显示了包含的资源、依赖项和其他信息。
版本还会生成两个额外文件。
第一个是以其所在目录命名的较小AssetBundle(AssetBundles 构建到的目录)。此文件称为清单包
,它包含 AssetBundleManifest 对象,该对象将有助于确定在运行时加载哪些包依赖项。要了解有关如何使用此包和清单对象的详细信息,请参阅有关 以本机方式使用 AssetBundles 的文档。
同样还会为清单包生成一个 .manifest 文件。其内容如下所示
ManifestFileVersion: 0
AssetBundleManifest:
AssetBundleInfos:
Info_0:
Name: scene1assetbundle
Dependencies: {}
清单包的 .manifest 文件会记录 AssetBundles 的关联方式及其依赖关系。这类似于其他信息,会由清单包内 AssetBundleManifest 对象进行记录,而且由于它是一个文本文件,便于人类阅读和外部工具进行解析。此 .manifest 文件对于防止对 AssetBundle 中所用类型进行代码抽取
十分重要,但如果 Player Build 中内容未用此类类型,则此 .manifest 文件对于防止对 AssetBundle 中所用类型进行代码抽取
十分重要。如果在玩家设置这些设置可让你为由 Unity 构建的最终游戏设置各种特定于玩家的选项。 更多信息
请参阅词汇表中启用了代码抽取,则在执行 Player Builds 时应通过设置BuildPlayerOptions.assetBundleManifestPath来传递此清单的路径。有关代码抽取的详细信息,请参阅发行大小和代码抽取。
注意:使用 Addressables 软件包而不是BuildPipeline.BuildAssetBundles
构建时,会写入相同格式的 AssetBundle 文件,但没有清单文件,并且不会生成清单包。有关更多详细信息,请参阅Addressables 文档。