在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 許可協議。轉載請註明出處!