Unity Resources资源打包以及加载(二)
发表于2017-01-22
继Unity Resources资源打包以及加载(一)后,本篇介绍的是Unity Resources资源打包以及要实现动态加载,想知道的可以看看下面是如何实现的。
第1步,根据需要申明自己需要的临时存储结构
//模型预制体
Globals.assetBundle_Perfab = new Dictionary();
//模型UI
Globals.assetBundle_UI = new Dictionary();
//PPT
Globals.assetBundle_Resources_Image = new Dictionary();
Globals.assetBundle_Resources_Audio = new Dictionary();
#if UNITY_EDITOR
basePath = "file://" + Application.dataPath + "/ResourcesAssetBundle/";
#elif UNITY_ANDROID
basePath="file://"+Application.persistentDataPath+"/ResourcesAssetBundle/";
#endif
第2步,使用协同程序www加载资源
IEnumerator LoadFromAssetBundle()
{
List assetBundleList = new List();
foreach (var vp in VersionParam.vplist)
{
if (!vp.Filename.Contains(".manifest") && !vp.Filename.Equals("StreamingAssets"))
{
WWW wwwPrefab =new WWW(@basePath + vp.Filename);
yield return wwwPrefab;
while (!wwwPrefab.isDone)
{
message.text = message.text + "wwwPrefab return null";
yield return null;
}
if (!string.IsNullOrEmpty(wwwPrefab.error))
{
message.text = message.text + "wwwPrefab error break"+wwwPrefab.error;
Debug.Log(wwwPrefab.error);
yield break;
}
else
{
AssetBundle abPrefab = wwwPrefab.assetBundle;
assetBundleList.Add(abPrefab);
string[] type=vp.Filename.Split('_');
string typestr=type[type.Length-1];
switch (typestr)
{
case "prefab":
Globals.assetBundle_Perfab.Add(vp.Filename, abPrefab.LoadAsset(vp.Filename));
break;
case "ui":
Globals.assetBundle_UI.Add(vp.Filename, abPrefab.LoadAsset(vp.Filename));
break;
case "audio":
Globals.assetBundle_Resources_Audio.Add(vp.Filename, abPrefab.LoadAsset(vp.Filename));
break;
case "ppt":
Globals.assetBundle_Resources_Image.Add(vp.Filename, abPrefab.LoadAsset(vp.Filename));
break;
}
}
}
}
foreach (var abl in assetBundleList)
{
if (abl != null)
{
abl.Unload(false);
}
}
注意:一定要Unload。打包和加载版本对比使用了MD5。。。后续我会上传打包的同时创建MD5版本对比文件
关于Unity Resources资源打包以及动态加载实现就介绍这么多了,希望可以帮到大家。