1. 程式人生 > >Unity資源載入的選擇(同步/非同步)

Unity資源載入的選擇(同步/非同步)

非同步 優點:速度快,與主執行緒無關,

        缺點:呼叫比較麻煩,因為你不知道啥時候你的資源準備好了,最好的做法也是使用回撥,這樣回撥就會很多,很亂個人感覺管理起來很不舒服。

同步 優點:管理起來方便,而且資源準備好了是可以及時返回的,

        缺點:是沒有非同步快

綜合上訴,最終我選擇了 同步,因為我不希望程式碼不整潔,也不希望寫太多的回撥函式來通知呼叫者,資源準備妥當了。那麼問題來了,如何解決同步的缺點呢。也就是卡主執行緒。之前一直以為corotine這玩意可以幫到我們。但是當我深入理解了coroutine以後發現他其實也是在主執行緒中的。最終我選擇了使用c# 的多執行緒機制來解決這個問題。

ok 說下資源的分類和載入(打包在新版本的unity基本上都是一句話了,這裡不介紹了)

我們遊戲的打包後的資源目錄大概分類是

StreamingAssets

    Windows

    iOS

            AssetBundle(這下面會具體分很多類新的Bundle比如model,effect等等這些都是預製件打包出來的,最終是以.assetbundle結尾) 這個地方會有自動命名Assetbundle來進行支援,目錄就制定在這一層,bundle的名字會帶上資料夾的名字,這樣打出來的bundle就會生成在對應的資料夾下。

           例如:打包的檔案是這樣的目錄

                     AssetBundle

                          Model

                              monster.prefab

            自動命名後的bundle是這樣的名字: model/monster(這個會自動被unity轉換成小寫)

           Scene(這個是我們的場景檔案,會以.Unity3D結尾)

           data (資料檔案,主要是策劃的配置表文件 目前使用的是protobuf序列化的二進位制檔案)

           version.txt (版本號檔案)

           file.txt(md5資訊檔案)

===================================================================================================================================

載入

載入流程(後續流程圖)

這裡主要說下原理

1> 打包資源並壓縮(LZMA)放到資源服上

2>下載資源

3> 解壓到持久化目錄

4> 使用AssetBundle.CreateFromFile 讀取 assetbundle

對於場景比較特殊,目前是隻考慮直接打完整場景了,可能會重複一些物件,這個後面看需求了,如果要提出來也是很容易的。自己xml或者json動態建立場景即可