1. 程式人生 > >Unity資源熱更之AssetBundle(1)———基本介紹

Unity資源熱更之AssetBundle(1)———基本介紹

聊到熱更就必須先了解AssetBundle.

1.AssetBundle是什麼呢?

AssetBundles 是有 Unity 編輯器在編輯環境中(enit-time)建立的一些列的檔案,這些檔案可以被用在專案的執行環境中(run-time)。 AssetBundles 可以包括的資原始檔有模型檔案(models)、材質(materials)、紋理(textures)和場景(scenes)。AssetBundles 不能包含指令碼檔案。具體來說,一個 AssetBundle 就是把一系列的資原始檔或者場景檔案以某種方式緊密儲存的一個檔案。這個 AssetBundle 檔案可以被單獨載入到可執行的應用程式中。AssetBundles 可以由被 Unity 構建的遊戲或者應用按需載入使用。這允許對像模型、紋理、音訊、甚至是整個的遊戲場景這樣的資源進行流式載入和非同步載入。AssetBundles 可以預快取(pre-cached)和儲存在本地,這樣在執行時就可以立即載入它們。但是 AssetBundles 技術的主要的目的是在需要的時候能夠從遠端的伺服器上按需請求特定的資源,並載入到遊戲中。AssetBundles 可以包含 Unity 可以識別的任何型別的資源,包括自定義的二進位制資料。唯一的例外是,指令碼資源是不被允許的。

2.AssetBundle 和 Reousrces 的區別呢?


其實Resources.Load()本質和AssetBundle相差不大,只不過是從一個預設打程序序包裡面的AssetBundle里加載資源。然而我們知道一旦遊戲打包出來之後Resources資料夾就不存在了,而其中的資源也被打包到程式裡面看不到了。所以要實現資源的熱更不能採用這個方法。而且Resource這種方式為了保證Prefabs的依賴完整性會導致共同包含的依賴項重複,會大大增加遊戲資源包的大小。而且AssetBundle支援動態下載替換,是Unity Web Caching License唯一可以快取的內容。

3.使用AssetBundle實現資源熱更的流程?

a. 打包AssetBundle。

b. 上傳到伺服器server。

c. 運行遊戲時候自動判斷版本號,如果不同就從伺服器上下載新的AssetBundle包替換本地AB包。

d. 解析載入AssetBundle.完成資源熱更。

4.AssetBundle的使用性平臺與跨平臺性

Standalone WebPlaye IOS Android
Standalone
WebPlayer
IOS
Android

5.AssetBundle使用的相關準則

a.AssetBundle式需要整體下載和快取的。

b.AssetBundles是不需要整體載入到應用程式中,可以只加載其中某些資源。

c.在AssetBundles中的資源對其他資源有依賴關係。

d.在AssetBundles中的資源可以同其他資源具有相同的依賴關係。

e.AssetBundle應為每個目標平臺單獨構建相應的包。

6.AssetBundle依賴關係介紹

什麼是依賴關係?比如說如果你的一個模型有某個材質,當你把這個模型和材質都打包了之後,這個模型就是依賴這個材質的。也就是說你Load這個模型之前需要先將材質Load進來否則就會丟失材質。越是複雜的Prefab那麼發生的依賴關係也就越多,如果不處理好就會導致素材丟失等情況。所以,我們需要對資源嚴格進行劃分。不過在Unity5.x推出了新的AssetBundle系統,它會幫我們處理這些依賴關係項。

7.AssetBundle的組織

一個專案中肯定不止一個AssetBundle包,而每個AB包可能不止一個asset。而如何取組織資原始檔,也就是把哪些資源打包到一起,哪些分開是值得商議的。每一個 AssetBundle 都有一些技術開銷。AssetBundles 是一些封裝資源的檔案。這種封裝會增大了 AssetBundle 的整體大小,儘管這種大小的增加不會太明顯,而且是可測量的。當組織 AssetBundles 時,是更多的小的 AssetBundles 還是更少的大的 AssetBundles 呢?這是需要我們根據自己的專案的實際情況來好好權衡的。更多的小的 AssetBundles 會面臨更多的跟蹤和建立相關的開銷,太少的 AssetBundles 會使單個AssetBundle 本身的大小變大,也會導致它們可能包含一些冗餘的資料。

8.結語

AssetBundles 是一些包含模型、材質、紋理和場景等資源的檔案。AssetBundle 是由 Unity 編輯器在編輯期間串接創建出來的,可以被應用程式在執行期間使用的。AssetBundles 是設計用來按需從本地或者伺服器載入資源的。

對於如何在專案中對資源進行AssetBundle打包和解析,請閱讀下接下來的兩篇文章:

Unity資源熱更之AssetBundle(2)———舊版本AssetBundle

Unity資源熱更之AssetBundle(3)———新版本AssetBundle