天天看點

[翻譯]Unity中的AssetBundle詳解(三)

建構AssetBundles

在AssetBundle工作流程的文檔中,我們有一個示例代碼,它将三個參數傳遞給

BuildPipeline.BuildAssetBundles

函數。讓我們更深入地了解我們實際上在說什麼。

Assets/AssetBundles:這是AssetBundles将被輸出到的目錄。您可以将其更改為所需的任何輸出目錄,隻需在嘗試建構之前確定檔案夾實際存在。

BuildAssetBundleOptions

有多種不同的

BuildAssetBundleOptions

選項可以選擇。相關的各個選項可以參閱腳本API文檔中的關于BuildAssetBundleOptions的内容。

雖然随着需求的變化和增加,您可以自由組合

BuildAssetBundleOptions

選項,但有三個特定的

BuildAssetBundleOptions

是用來處理AssetBundle壓縮:

  • BuildAssetBundleOptions.None:此bundle選項使用LZMA格式壓縮,這種壓縮是序列化的資料檔案的單一壓縮的LZMA流。 LZMA壓縮的檔案在使用前需要對整個bundle解壓縮。這導緻最小的檔案大小和由于解壓縮而稍微增加的加載時間。值得注意的是,當使用此

    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具有可比較的加載時間,還具有減小磁盤大小的附加優勢。

BuildTarget

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。我們将在以後讨論更多的内容以及如何使用它。

The AssetBundle File

這是缺少.manifest擴充名的檔案,以及你在運作時加載的内容,以加載你的資産。

AssetBundle檔案是一個在内部包含多個檔案的存檔。此存檔的結構可能會稍有變化,具體取決于它是AssetBundle還是場景AssetBundle。這是一個正常的AssetBundle的結構:

場景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 許可協定。轉載請注明出處!

作者:Sheh偉偉

出處:http://www.cnblogs.com/davidsheh/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利.

繼續閱讀