基础的部分可以看这个专栏:
https://www.bilibili.com/opus/997803503691759640我主要讲讲在1和2中遇到的问题,及如何避免。
首先是1,直接用 宵夜97视频中的方法是不适合Unity4.6这个版本的。
最终查询了一下Unity4.6的手册,以及 参考了这个链接:
https://discussions.unity.com/t/solved-unity-4-system-save-load-assetbundle/578879 ,选定如下的载入方法
public string url;
public int version;
public IEnumerator LoadBundle()
{
using (WWW www =
http://WWW.LoadFromCacheOrDownload(url, version))
{
Logger.LogInfo("尝试从 www 载入 " +url +"} {" + version + "}");
yield return www;
if (System.IO.File.Exists(url)) Logger.LogInfo("文件存在AssetBundle:myAssetBundle.unity3d !");
AssetBundle assetBundle =
http://www.assetBundle;Logger.LogInfo("成功载入AssetBundle:myAssetBundle.unity3d !");
if (assetBundle == null)//此处为空
{
Logger.LogInfo("AssetBundle 为空!");
}
else
{
if(assetBundle.mainAsset != null)
{
//成功载入后的操作
GameObject gameObject = assetBundle.mainAsset as GameObject;
Instantiate(gameObject);
assetBundle.Unload(false);
GameObject gobj = GameObject.Find("TestUI");
if (gobj != null) {
loadFont = gobj.GetComponentInChildren<Text>().font;
isLoadedFont = true;
//重新设置字体
for (int i = 0; i < recordMesh.Count; i++)
{
SetFontSizeOverride(recordMesh[i], recordFontSize[i]);
}
recordMesh.Clear();
recordFontSize.Clear();
}
}
else
{
Logger.LogInfo("AssetBundle:myAssetBundle.unity3d assetBundle.mainAsset 为空!");
}
}
}
}
在你需要的地方,使用StartCoroutine(LoadBundle());来开启这个载入线程。