接上文,項目中因為需要UI熱更新,所以我使用了AssetBundle這個解決方案.
一般來說,我們使用AssetBundle產生資源套件常用的方案是如下這麼用:
using UnityEngine;using UnityEditor;/// <summary>/// 匯出資源類/// </summary>public class ExportGameResources{ static BuildAssetBundleOptions m_option = BuildAssetBundleOptions.CollectDependencies | // 收集所有依賴關係 BuildAssetBundleOptions.DeterministicAssetBundle; /// <summary> /// 匯出NGUI成Assetbundle /// </summary> [MenuItem("Assets/匯出/資源")] static public void ExportNGUI() { // 擷取編輯器中選擇的項 Object[] objs = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets); // 沒有選中項 if (objs.Length == 0) { return; } string _savepath = null; // 判斷是多選還是單選 if (objs.Length == 1) { // 擷取儲存路徑 _savepath = EditorUtility.SaveFilePanel("Save Resource", "", objs[0].name, "assetbundle"); // 產生assetbundle BuildPipeline.BuildAssetBundle(objs[0], null, _savepath, m_option, EditorUserBuildSettings.activeBuildTarget); } else { // 擷取儲存路徑 _savepath = EditorUtility.SaveFolderPanel("Save Resources", "", ""); // 產生assetbundle for (int i = 0; i < objs.Length; ++i) { BuildPipeline.BuildAssetBundle(objs[i], null, _savepath + "/" + objs[i].name + ".assetbundle", m_option, EditorUserBuildSettings.activeBuildTarget); } } }}
這就是我最開始寫的將NGUI預製件打包成Assetbundle的方法.
這個方法看起來沒啥問題,使用WWW流載入也沒有問題.
但是真的如此嗎?
其實我一開始也沒有注意到AssetBundle中的資源依賴關係這個問題.
因為我最開始產生的幾個Assetbundle0均是ngui示範中的幾個預製件,產生出來的大小比較正常一般幾K到幾十K.
於是我天真的以為就這麼用就好了.
直到我開始做幾個需要中文文本支援的介面時,才發現我跳進了一個小坑.
TODO:.................
PS:這個Blog嘛 不算啥專業的技術Blog,只是隨筆.