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

構建AssetBundles

AssetBundle工做流程的文檔中,咱們有一個示例代碼,它將三個參數傳遞給BuildPipeline.BuildAssetBundles函數。讓咱們更深刻地瞭解咱們實際上在說什麼。
Assets/AssetBundles:這是AssetBundles將被輸出到的目錄。您能夠將其更改成所需的任何輸出目錄,只需在嘗試構建以前確保文件夾實際存在。html

BuildAssetBundleOptions

有多種不一樣的BuildAssetBundleOptions選項能夠選擇。相關的各個選項能夠參閱腳本API文檔中的關於BuildAssetBundleOptions的內容。
雖然隨着需求的變化和增長,您能夠自由組合BuildAssetBundleOptions選項,但有三個特定的BuildAssetBundleOptions是用來處理AssetBundle壓縮:git

  • 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具備可比較的加載時間,還具備減少磁盤大小的附加優點。github

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,他們的清單文件將以下所示: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


同系列文章

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

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

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

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


本文做者: Sheh偉偉
本文連接: http://davidsheh.github.io/2017/08/21/「翻譯」Unity中的AssetBundle詳解(三)/
版權聲明: 本博客全部文章除特別聲明外,均採用 CC BY-NC-SA 3.0 許可協議。轉載請註明出處!

相關文章
相關標籤/搜索