在AssetBundle工做流程的文档中,咱们有一个示例代码,它将三个参数传递给BuildPipeline.BuildAssetBundles
函数。让咱们更深刻地了解咱们实际上在说什么。
Assets/AssetBundles:这是AssetBundles将被输出到的目录。您能够将其更改成所需的任何输出目录,只需在尝试构建以前确保文件夹实际存在。html
有多种不一样的BuildAssetBundleOptions
选项能够选择。相关的各个选项能够参阅脚本API文档中的关于BuildAssetBundleOptions的内容。
虽然随着需求的变化和增长,您能够自由组合BuildAssetBundleOptions
选项,但有三个特定的BuildAssetBundleOptions
是用来处理AssetBundle压缩:git
BuildAssetBundleOptions
时,为了使用捆绑包中的任何资源,必须首先解压缩整个捆绑包。一旦bundle解压缩后,将使用LZ4在磁盘上从新压缩,LZ4压缩在使用bundle中的资产时,不须要提早对整个bundle进行解压缩。这最适合用于bundle中的资产,以便从bundle中使用一个资产将意味着全部资产将被加载。打包角色或场景的全部资源都是可能使用的捆绑包的一些示例。因为较小的初始文件大小,利用LZMA压缩仅推荐用于从异地主机下载资源包。一旦文件被下载,它会缓存为lz4压缩包。BuildAssetBundleOptions.UncompressedAssetBundle
: 此bundle选项以数据彻底未压缩的方式构建bundle。未压缩的缺点是较大的文件下载大小。可是,一旦下载的加载时间会更快。BuildAssetBundleOptions.ChunkBasedCompression
: 此bundle选项使用称为LZ4的压缩方法,这致使比LZMA更大的压缩文件大小,但不像LZMA那样在使用以前不须要整个捆绑包解压缩。 LZ4使用基于块的算法,容许将AssetBundle以切片(pieces)或“块”(chunks)的形式加载。解压缩单个块容许使用包含的资产,即便AssetBundle的其余块未被解压缩。使用ChunkBasedCompression与未压缩的bundle具备可比较的加载时间,还具备减少磁盘大小的附加优点。github
BuildTarget.Standalone
: 在这里,咱们正在告诉构建管道,咱们将使用这些AssetBundles的目标平台。
您能够在BuildTarget的API的脚本参考文档中找到可用的显式构建目标的列表。可是,若是您不但愿在构建目标中进行硬编码,则能够随时利用EditorUserBuildSettings.activeBuildTarget,这将自动找到你目前的设置构建和构建AssetBundles基于的目标 平台。
一旦正确设置了构建脚本,就能够构建bundles了。若是您按照上述脚本示例,请单击Assets > Build AssetBundles以启动该过程。
如今你已经成功构建了AssetBundles,你可能会注意到你的AssetBundles目录有可能比你预期更多的文件。确切地说,是2 *(n + 1)个文件。让咱们花一点时间来看看BuildPipeline.BuildAssetBundles
的产量。算法
对于你在编辑器中指定的每一个AssetBundle,你将注意到一个包含AssetBundle name
和AssetBundle name +.manifest
的文件。缓存
将会有一个额外的bundle和manifest,它不会与您建立的任何AssetBundle共享一个名称。而是以它位于的目录(AssetBundles构建到的目录)命名。这是Manifest Bundle。咱们将在之后讨论更多的内容以及如何使用它。编辑器
这是缺乏.manifest扩展名的文件,以及你在运行时加载的内容,以加载你的资产。
AssetBundle文件是一个在内部包含多个文件的存档。此存档的结构可能会稍有变化,具体取决于它是AssetBundle仍是场景AssetBundle。这是一个正常的AssetBundle的结构:
函数
场景AssetBundle更改自标准的AssetBundles,由于它针对场景及其内容的流加载进行了优化。该图像显示场景bundle的内部结构:优化
对于生成的每一个包,包括附加的清单包,都会生成关联的清单文件。清单文件可使用任何文本编辑器打开,而且包含诸如循环冗余校验(CRC)数据和包的依赖性数据的信息。对于正常的AssetBundles,他们的清单文件将以下所示:ui
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的文档。this
原文连接:
Building AssetBundles
同系列文章
本文做者: Sheh伟伟
本文连接: http://davidsheh.github.io/2017/08/21/「翻译」Unity中的AssetBundle详解(三)/
版权声明: 本博客全部文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!