繼Unity Resources資源打包以及加載(一)後,本篇要實現動態加載。
//模型預製體
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
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。