「翻譯」Unity中的AssetBundle詳解(三)

構(gòu)建AssetBundles

AssetBundle工作流程的文檔中,我們有一個(gè)示例代碼,它將三個(gè)參數(shù)傳遞給BuildPipeline.BuildAssetBundles函數(shù)。讓我們更深入地了解我們實(shí)際上在說什么。
Assets/AssetBundles:這是AssetBundles將被輸出到的目錄。您可以將其更改為所需的任何輸出目錄,只需在嘗試構(gòu)建之前確保文件夾實(shí)際存在。

BuildAssetBundleOptions

有多種不同的BuildAssetBundleOptions選項(xiàng)可以選擇。相關(guān)的各個(gè)選項(xiàng)可以參閱腳本API文檔中的關(guān)于BuildAssetBundleOptions的內(nèi)容。
雖然隨著需求的變化和增加,您可以自由組合BuildAssetBundleOptions選項(xiàng),但有三個(gè)特定的BuildAssetBundleOptions是用來處理AssetBundle壓縮:

  • BuildAssetBundleOptions.None:此bundle選項(xiàng)使用LZMA格式壓縮,這種壓縮是序列化的數(shù)據(jù)文件的單一壓縮的LZMA流。 LZMA壓縮的文件在使用前需要對整個(gè)bundle解壓縮。這導(dǎo)致最小的文件大小和由于解壓縮而稍微增加的加載時(shí)間。值得注意的是,當(dāng)使用此BuildAssetBundleOptions時(shí),為了使用捆綁包中的任何資源,必須首先解壓縮整個(gè)捆綁包。一旦bundle解壓縮后,將使用LZ4在磁盤上重新壓縮,LZ4壓縮在使用bundle中的資產(chǎn)時(shí),不需要提前對整個(gè)bundle進(jìn)行解壓縮。這最適合用于bundle中的資產(chǎn),以便從bundle中使用一個(gè)資產(chǎn)將意味著所有資產(chǎn)將被加載。打包角色或場景的所有資源都是可能使用的捆綁包的一些示例。由于較小的初始文件大小,利用LZMA壓縮僅推薦用于從異地主機(jī)下載資源包。一旦文件被下載,它會緩存為lz4壓縮包。
  • BuildAssetBundleOptions.UncompressedAssetBundle: 此bundle選項(xiàng)以數(shù)據(jù)完全未壓縮的方式構(gòu)建bundle。未壓縮的缺點(diǎn)是較大的文件下載大小。但是,一旦下載的加載時(shí)間會更快。
  • BuildAssetBundleOptions.ChunkBasedCompression: 此bundle選項(xiàng)使用稱為LZ4的壓縮方法,這導(dǎo)致比LZMA更大的壓縮文件大小,但不像LZMA那樣在使用之前不需要整個(gè)捆綁包解壓縮。 LZ4使用基于塊的算法,允許將AssetBundle以切片(pieces)或“塊”(chunks)的形式加載。解壓縮單個(gè)塊允許使用包含的資產(chǎn),即使AssetBundle的其他塊未被解壓縮。

使用ChunkBasedCompression與未壓縮的bundle具有可比較的加載時(shí)間,還具有減小磁盤大小的附加優(yōu)勢。

BuildTarget

BuildTarget.Standalone: 在這里,我們正在告訴構(gòu)建管道,我們將使用這些AssetBundles的目標(biāo)平臺。
您可以在BuildTarget的API的腳本參考文檔中找到可用的顯式構(gòu)建目標(biāo)的列表。但是,如果您不希望在構(gòu)建目標(biāo)中進(jìn)行硬編碼,則可以隨時(shí)利用EditorUserBuildSettings.activeBuildTarget,這將自動找到你目前的設(shè)置構(gòu)建和構(gòu)建AssetBundles基于的目標(biāo) 平臺。
一旦正確設(shè)置了構(gòu)建腳本,就可以構(gòu)建bundles了。如果您按照上述腳本示例,請單擊Assets > Build AssetBundles以啟動該過程。
現(xiàn)在你已經(jīng)成功構(gòu)建了AssetBundles,你可能會注意到你的AssetBundles目錄有可能比你預(yù)期更多的文件。確切地說,是2 *(n + 1)個(gè)文件。讓我們花一點(diǎn)時(shí)間來看看BuildPipeline.BuildAssetBundles的產(chǎn)量。

對于你在編輯器中指定的每個(gè)AssetBundle,你將注意到一個(gè)包含AssetBundle nameAssetBundle name +.manifest的文件。

將會有一個(gè)額外的bundle和manifest,它不會與您創(chuàng)建的任何AssetBundle共享一個(gè)名稱。而是以它位于的目錄(AssetBundles構(gòu)建到的目錄)命名。這是Manifest Bundle。我們將在以后討論更多的內(nèi)容以及如何使用它。

The AssetBundle File

這是缺少.manifest擴(kuò)展名的文件,以及你在運(yùn)行時(shí)加載的內(nèi)容,以加載你的資產(chǎn)。
AssetBundle文件是一個(gè)在內(nèi)部包含多個(gè)文件的存檔。此存檔的結(jié)構(gòu)可能會稍有變化,具體取決于它是AssetBundle還是場景AssetBundle。這是一個(gè)正常的AssetBundle的結(jié)構(gòu):


ArchiveFileSystem

場景AssetBundle更改自標(biāo)準(zhǔn)的AssetBundles,因?yàn)樗槍鼍凹捌鋬?nèi)容的流加載進(jìn)行了優(yōu)化。該圖像顯示場景bundle的內(nèi)部結(jié)構(gòu):

The Manifest File

對于生成的每個(gè)包,包括附加的清單包,都會生成關(guān)聯(lián)的清單文件。清單文件可以使用任何文本編輯器打開,并且包含諸如循環(huán)冗余校驗(yàn)(CRC)數(shù)據(jù)和包的依賴性數(shù)據(jù)的信息。對于正常的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如何關(guān)聯(lián)以及它們的依賴關(guān)系?,F(xiàn)在,只要明白這個(gè)bundle包含了AssetBundleManifest對象,這對于找出在運(yùn)行時(shí)加載哪個(gè)bundle依賴是非常有用的。要了解有關(guān)如何使用此bundle和manifest對象的更多信息,請參閱使用本地AssetBundles的文檔。

原文鏈接:
Building AssetBundles


同系列文章

「翻譯」Unity中的AssetBundle詳解(一)

「翻譯」Unity中的AssetBundle詳解(二)

「翻譯」Unity中的AssetBundle詳解(三)

「翻譯」Unity中的AssetBundle詳解(四)


本文作者: Sheh偉偉
本文鏈接: http://davidsheh.github.io/2017/08/21/「翻譯」Unity中的AssetBundle詳解(三)/
版權(quán)聲明: 本博客所有文章除特別聲明外,均采用 CC BY-NC-SA 3.0 許可協(xié)議。轉(zhuǎn)載請注明出處!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 這部分主要討論了AssetBundle的如下知識: AssetBundle的基礎(chǔ)知識 使用AssetBundle的...
    Wenchao閱讀 1,819評論 0 5
  • AssetBundles AssetBundle是一個(gè)存檔文件,其中包含平臺在運(yùn)行時(shí)加載的特定資產(chǎn)(模型,紋理,預(yù)...
    Sheh偉偉閱讀 1,875評論 0 2
  • 翻譯:莫銘原文地址:AssetBundle usage patterns 本系列中的上一篇文章覆蓋了AssetBu...
    莫銘閱讀 5,689評論 1 12
  • 這一章來說說AssetBundles,介紹下它的基礎(chǔ)系統(tǒng),還有一些和AssetBundles進(jìn)行交互的核心API。...
    莫銘閱讀 3,076評論 6 10
  • 【每日拔拔草】:三次思維空性;7/26 1.看見顧客臉上露出微笑表達(dá)非常喜歡今天的療程源于我曾經(jīng)支持和信任他人的服...
    敏樂麻麻閱讀 375評論 2 0

友情鏈接更多精彩內(nèi)容