日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

unity热更新json_Unity热更新之AssetBundle打包篇

發布時間:2024/10/5 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 unity热更新json_Unity热更新之AssetBundle打包篇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

unity3d在5.0之后打包Assetbundle變得比之前簡單多了,最簡單的辦法就是把所有資源都標記Assetbundle的Flag,然后直接調用unity3d的打包Assetbundle即可,詳情可參見官方文檔。

通過標記打包方式的優缺點

這種打包方式的優點在于簡單,缺點在于不好管理需要需要打包的資源。舉例來說就是你必須把所有需要打包的資源都標記上Assetbundle的Flag,(包括prefab,texture,material,fbx,animation等),最后容易把資源打得特別散,造成每一個文件都是一個assetbundle。這樣其實對于加載是特別不友好的,每一個assetbundle的引用都至少會有大約4kb的內存。如果不這樣做,只對prefab做標記的話,容易造成資源的重復打包,一些texture,fbx可能會多次打進不同的assetbundle里。

通過buildmap方式打包的優缺點

unity還提供了一種buildmap的打包方式,可以自己管理需要打包的資源,優點在于自己管理依賴關系,可以最大程度的控制打包粒度,缺點就是需要寫點代碼,大約500行。

使用buildmap打包的流程

1.目錄管理

管理好你的資源目錄,把需要單獨打包和不需要單獨打包的文件放在不同的目錄下,默認需要單獨打包的只有預制件目錄,其他的目錄一般可以根據依賴自動打進包里,可以參考下面的目錄結構:

Assets

|--Prefabs

|--a.prefab

|--b.prefab

|--Textures

|--a.tex

|--b.tex

|--c.tex

|--Materials

|--Aniamations

|--Models

|--Other

我們打包前會遍歷Prefabs目錄,得到每一個prefab的依賴,構建一棵依賴樹,根據依賴樹進行打包。

2.構建依賴樹

unity3d提供了 AssetDatabase.GetDependencies的方法來獲取一個文件的依賴關系,我們假設遍歷完預制件文件夾后得到的依賴關系如下:

a.prefab依賴于a.mat,a.fbx,common.animator;

b.prefab依賴于b.mat,b.fbx,common.animator;

a.mat依賴于a.tex,b.tex

b.mat依賴于b.tex,c.tex,d.tex

最終形成的依賴關系樹如下:

buildtree.png

注意:unity提供了獲取預制件的直接依賴和所有依賴(包括間接依賴),構建依賴樹時需要獲取預制件的直接依賴,再依次獲取每一個依賴文件的直接依賴,直到獲取到最底層的依賴,由此構建出所有預制件形成的依賴樹。

3.根據依賴樹打包Assetbundle

如果樹的一個節點有2個或以上的父節點,則該資源被2個或多個其他資源所依賴,該節點需要打包成獨立的Assetbundle。

如果樹的一個節點沒有父節點,則該資源是最頂層的預制件,需要打包成獨立的Assetbundle。

打包時應該從最底層開始逐層向上遍歷,在每一層尋找是否有節點的父節點數量大于1或者等于0,將滿足條件的節點打成Assetbundle,直到遍歷完整棵樹。因為打包Assetbundle的時候是會將所有被依賴到的文件都自動打進Assetbundle里,所以從底層往上打包可以讓上層的Assetbundle直接依賴到底層的Assetbundle,避免了資源被重復打進不同的Assetbundle里。

根據上面的樹,最終打出來的Assetbundle如下:

b.tex.assetbundle

common.animator.assetbundle

a.prefab.assetbundle

b.prefab.assetbundle

這樣既不會每一個文件都打出一個assetbundle,也省去了手動管理依賴關系的繁瑣。

關于場景的打包

因為unity3d 5.x之后的版本不再將光照貼圖的信息存放在預制件中,因此如果做過光照烘焙的場景,就必須把預制件直接擺放在場景中,動態加載預制件將丟失光照貼圖的信息。對于這種情況,擺放在場景中的預制件可以不放在最終打包的預制件目錄中,因為打包場景的時候會將場景的資源都統一打包,不會依賴到你所打包的預制件,因此場景中的預制件建議單獨存放目錄。

關于其他文本文件

其他的文本文件例如json,lua或者其他配置文件,可以直接在打包的時候復制一份到StreamingAssets,保證最后我們所有的資源在手機上都通過StreamingAssets來加載。

總結

以上是生活随笔為你收集整理的unity热更新json_Unity热更新之AssetBundle打包篇的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。