Unity技术分享Unity技术分享Unity教程合集

「翻译」Unity中的AssetBundle详解(三)

2017-08-26  本文已影响80人  Sheh伟伟

构建AssetBundles

AssetBundle工作流程的文档中,我们有一个示例代码,它将三个参数传递给BuildPipeline.BuildAssetBundles函数。让我们更深入地了解我们实际上在说什么。
Assets/AssetBundles:这是AssetBundles将被输出到的目录。您可以将其更改为所需的任何输出目录,只需在尝试构建之前确保文件夹实际存在。

BuildAssetBundleOptions

有多种不同的BuildAssetBundleOptions选项可以选择。相关的各个选项可以参阅脚本API文档中的关于BuildAssetBundleOptions的内容。
虽然随着需求的变化和增加,您可以自由组合BuildAssetBundleOptions选项,但有三个特定的BuildAssetBundleOptions是用来处理AssetBundle压缩:

使用ChunkBasedCompression与未压缩的bundle具有可比较的加载时间,还具有减小磁盘大小的附加优势。

BuildTarget

BuildTarget.Standalone: 在这里,我们正在告诉构建管道,我们将使用这些AssetBundles的目标平台。
您可以在BuildTarget的API的脚本参考文档中找到可用的显式构建目标的列表。但是,如果您不希望在构建目标中进行硬编码,则可以随时利用EditorUserBuildSettings.activeBuildTarget,这将自动找到你目前的设置构建和构建AssetBundles基于的目标 平台。
一旦正确设置了构建脚本,就可以构建bundles了。如果您按照上述脚本示例,请单击Assets > Build AssetBundles以启动该过程。
现在你已经成功构建了AssetBundles,你可能会注意到你的AssetBundles目录有可能比你预期更多的文件。确切地说,是2 *(n + 1)个文件。让我们花一点时间来看看BuildPipeline.BuildAssetBundles的产量。

对于你在编辑器中指定的每个AssetBundle,你将注意到一个包含AssetBundle nameAssetBundle name +.manifest的文件。

将会有一个额外的bundle和manifest,它不会与您创建的任何AssetBundle共享一个名称。而是以它位于的目录(AssetBundles构建到的目录)命名。这是Manifest Bundle。我们将在以后讨论更多的内容以及如何使用它。

The AssetBundle File

这是缺少.manifest扩展名的文件,以及你在运行时加载的内容,以加载你的资产。
AssetBundle文件是一个在内部包含多个文件的存档。此存档的结构可能会稍有变化,具体取决于它是AssetBundle还是场景AssetBundle。这是一个正常的AssetBundle的结构:


ArchiveFileSystem

场景AssetBundle更改自标准的AssetBundles,因为它针对场景及其内容的流加载进行了优化。该图像显示场景bundle的内部结构:

The Manifest File

对于生成的每个包,包括附加的清单包,都会生成关联的清单文件。清单文件可以使用任何文本编辑器打开,并且包含诸如循环冗余校验(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: {}

Which shows the contained assets, dependencies, and other information.

The Manifest Bundle that was generated will have a manifest, but it’ll look more like this:

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

这将显示AssetBundles如何关联以及它们的依赖关系。现在,只要明白这个bundle包含了AssetBundleManifest对象,这对于找出在运行时加载哪个bundle依赖是非常有用的。要了解有关如何使用此bundle和manifest对象的更多信息,请参阅使用本地AssetBundles的文档。

原文链接:
Building AssetBundles


同系列文章

「翻译」Unity中的AssetBundle详解(一)

「翻译」Unity中的AssetBundle详解(二)

「翻译」Unity中的AssetBundle详解(三)

「翻译」Unity中的AssetBundle详解(四)


本文作者: Sheh伟伟
本文链接: http://davidsheh.github.io/2017/08/21/「翻译」Unity中的AssetBundle详解(三)/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!

上一篇下一篇

猜你喜欢

热点阅读