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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

unity5.4.3p2里面的AssetBundle打包流程

發(fā)布時間:2023/11/30 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 unity5.4.3p2里面的AssetBundle打包流程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

unity5.4.3p2里面的AssetBundle打包流程,相比之前unity4.x的打包簡單了許多,Unity4.X中打包的時候需要自己去管理依賴關系,各種BuildPipeline.PushAssetDependencies()和BuildPipeline.PopAssetDependencies(),一不小心手一抖,依賴關系就慘不忍睹。下面簡單說說一下unity5.4的步驟。

1.在工程里新建兩個prefab,分別為ui1.prefab和ui2.prefab,如下圖:

???

?? 然后選中ui1,在右下角的AssetBundle Setting中,設置ui1的AssetBundleName為ui1,一樣的步驟將ui2的AssetBundleName設置為ui2。注意:當把AssetBundleName設置為同一個的時候,將會打進同一個包,這里分開打包

??? 2.在ui1中引用ui2,具體引用操作很簡單,在ui1上掛個腳本,腳本里弄個publish GameObject prefab就好,如下圖:


??? 然后將AssetBundle目錄下的資源進行打包,打包過程其實很簡單(BuildAssetBundleOptions選擇不同的壓縮格式,壓縮比不一樣,在Profiler中SerializedFile大小也不一樣,加載后加壓的速度也不一樣,可酌情考慮使用),過程如下:

[csharp]?view plaincopy
  • using?UnityEngine;??
  • using?System.Collections;??
  • using?UnityEditor;??
  • public?class?CreateAssetBundles?:?Editor??
  • {??
  • ????[MenuItem("Tools/Build?AssetBundles")]??
  • ????static?void?BuildAllAssetBundles()??
  • ????{??
  • ????????BuildPipeline.BuildAssetBundles(Application.dataPath?+?"/AssetBundles",?BuildAssetBundleOptions.UncompressedAssetBundle,BuildTarget.Android);??
  • ????????AssetDatabase.SaveAssets();??
  • ????????AssetDatabase.Refresh();??
  • ????????Debug.LogWarning("打包成功");??
  • ????}??
  • }??
  • 打包后的結(jié)果如下:


    打包的時候,在輸出的bundle所在的文件夾內(nèi)還會生成一個總的manifest文件,叫做[文件夾名].manifest,我們看看都生成了什么文件,


    前面三個文件和后面三個文件是新生成的,其實我們用到的也就是這幾個文件。在AssetBundles.manifest中我們看到


    這里記錄了我們打包的所有的assetBundle的信息,其中info_0中記錄了ui1中引用了ui2。再看看ui1.manifest文件,


    這里也記錄了ui1引用了哪些assetBundle。

    3.加載assetBundle

    ?? 前面提到ui1中引用到了ui2的資源,所以這里分兩種方式加載,一種是先加載ui1再加載ui2,另一種是先加載ui2再加載ui1,看看這兩種方式有什么區(qū)別。

    ?(1)先加載ui1后加載ui2

    [csharp]?view plaincopy
  • void?Load()??
  • ???{??
  • ???????//加載assetBundleManifest文件????
  • ???????AssetBundle?assetBundleManifest?=?AssetBundle.LoadFromFile(Application.dataPath?+?"/AssetBundles/AssetBundles");??
  • ???????if?(assetBundleManifest?!=?null)????
  • ???????{??
  • ???????????AssetBundleManifest?manifest?=?(AssetBundleManifest)assetBundleManifest.LoadAsset("AssetBundleManifest");??
  • ??
  • ???????????//先加載ui1??
  • ???????????AssetBundle?bundle?=?AssetBundle.LoadFromFile(Application.dataPath?+?"/AssetBundles/ui1");??
  • ???????????GameObject?obj?=?bundle.LoadAsset("ui1")?as?GameObject;??
  • ???????????if?(obj?!=?null)??
  • ???????????{??
  • ???????????????Instantiate(obj);??
  • ???????????}??
  • ???????????//后加載ui1的依賴文件??
  • ???????????string[]?depends?=?manifest.GetAllDependencies("ui1");??
  • ???????????AssetBundle[]?dependsAssetbundle?=?new?AssetBundle[depends.Length];??
  • ???????????for?(int?index?=?0;?index?<?depends.Length;?index++)??
  • ???????????{??
  • ???????????????dependsAssetbundle[index]?=?AssetBundle.LoadFromFile(Application.dataPath?+?"/AssetBundles/"?+?depends[index]);??
  • ???????????}??
  • ???????}????
  • ???}????
  • 結(jié)果如下圖:


    所以這里先加載ui1后加載ui1的依賴文件ui2,Relation中的prefab居然沒有missing。我可記得在4.X的版本中必須先要加載依賴文件才行的啊

    (2)在加載依賴文件ui2再加載ui1,

    [csharp]?view plaincopy
  • void?Load()??
  • ???{??
  • ???????//加載assetBundleManifest文件????
  • ???????AssetBundle?assetBundleManifest?=?AssetBundle.LoadFromFile(Application.dataPath?+?"/AssetBundles/AssetBundles");??
  • ???????if?(assetBundleManifest?!=?null)????
  • ???????{??
  • ???????????AssetBundleManifest?manifest?=?(AssetBundleManifest)assetBundleManifest.LoadAsset("AssetBundleManifest");??
  • ???????????//加載ui1的依賴文件??
  • ???????????string[]?depends?=?manifest.GetAllDependencies("ui1");??
  • ???????????AssetBundle[]?dependsAssetbundle?=?new?AssetBundle[depends.Length];??
  • ???????????for?(int?index?=?0;?index?<?depends.Length;?index++)??
  • ???????????{??
  • ???????????????dependsAssetbundle[index]?=?AssetBundle.LoadFromFile(Application.dataPath?+?"/AssetBundles/"?+?depends[index]);??
  • ???????????}??
  • ???????????//加載ui1??
  • ???????????AssetBundle?bundle?=?AssetBundle.LoadFromFile(Application.dataPath?+?"/AssetBundles/ui1");??
  • ???????????GameObject?obj?=?bundle.LoadAsset("ui1")?as?GameObject;??
  • ???????????if?(obj?!=?null)??
  • ???????????{??
  • ???????????????Instantiate(obj);??
  • ???????????}??
  • ?????????????
  • ???????}????
  • ???}????????????????????????????????????????????

  • 這種情況ui2出來可以正常理解了。

    (3)只加載ui1,不加載依賴文件ui2

    [csharp]?view plaincopy
  • void?Load()??
  • ????{??
  • ????????//加載assetBundleManifest文件????
  • ????????AssetBundle?assetBundleManifest?=?AssetBundle.LoadFromFile(Application.dataPath?+?"/AssetBundles/AssetBundles");??
  • ????????if?(assetBundleManifest?!=?null)????
  • ????????{??
  • ????????????AssetBundleManifest?manifest?=?(AssetBundleManifest)assetBundleManifest.LoadAsset("AssetBundleManifest");??
  • ????????????//加載ui1的依賴文件??
  • ????????????//string[]?depends?=?manifest.GetAllDependencies("ui1");??
  • ????????????//AssetBundle[]?dependsAssetbundle?=?new?AssetBundle[depends.Length];??
  • ????????????//for?(int?index?=?0;?index?<?depends.Length;?index++)??
  • ????????????//{??
  • ????????????//????dependsAssetbundle[index]?=?AssetBundle.LoadFromFile(Application.dataPath?+?"/AssetBundles/"?+?depends[index]);??
  • ????????????//}??
  • ????????????//加載ui1??
  • ????????????AssetBundle?bundle?=?AssetBundle.LoadFromFile(Application.dataPath?+?"/AssetBundles/ui1");??
  • ????????????GameObject?obj?=?bundle.LoadAsset("ui1")?as?GameObject;??
  • ????????????if?(obj?!=?null)??
  • ????????????{??
  • ????????????????Instantiate(obj);??
  • ????????????}??
  • ??????????????
  • ????????}????
  • ????}????



  • 這種情況必須missing啊。

    so,問題出來了,本測試中使用的是unity5.4.3p2,為何步驟(1)中ui1依賴的文件ui2后加載也能出來?,暫時不知為何,看官如果知道可否指點一二。

    總結(jié)

    以上是生活随笔為你收集整理的unity5.4.3p2里面的AssetBundle打包流程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。