您的位置:首页 > 移动开发 > Unity3D

[Unity3d][NGUI]打包NGUI预制件成Assetbundle 两种思路.

2016-01-24 15:56 375 查看
接上文,项目中由于须要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");

if (!_savepath.Equals(""))
{
// 生成assetbundle
BuildPipeline.BuildAssetBundle(objs[0], null,
_savepath,
m_option,
EditorUserBuildSettings.activeBuildTarget);
}
}
else
{
// 获取保存路径
_savepath = EditorUtility.SaveFolderPanel("Save Resources", "", "");

if (!_savepath.Equals(""))
{
// 生成assetbundle
for (int i = 0; i < objs.Length; ++i)
{
BuildPipeline.BuildAssetBundle(objs[i], null,
_savepath + "/" + objs[i].name + ".assetbundle",
m_option,
EditorUserBuildSettings.activeBuildTarget);
}
}
}

Debug.Log("导出成功,导出路径:" + _savepath);
}
}

这就是我最開始写的将NGUI预制件打包成Assetbundle的方法.

这种方法看起来没啥问题,使用WWW流载入也没有问题.

可是真的如此吗?

事实上我一開始也没有注意到AssetBundle中的资源依赖关系这个问题.

由于我最開始生成的几个Assetbundle0均是ngui演示中的几个预制件,生成出来的大小比較正常一般几K到几十K.

于是我天真的以为就这么用就好了.

直到我開始做几个须要中文文本支持的界面时,才发现我跳进了一个小坑.

TODO:.................

PS:这个Blog嘛 不算啥专业的技术Blog,仅仅是随笔.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: