Unity3d 5.x AssetBoundle加载

上一篇讲了assetboundle的打包,这篇我们讲assetboundle的加载
其实加载过程也很简单,通过www加载或者通过AssetBundle.LoadFromFile加载,www可以加载网络资源,而AssetBundle.LoadFromFile不能加载网络资源。
加载assetboundle的方式有以下几种:

AssetBundle.LoadFromMemoryAsync
AssetBundle.LoadFromFile
WWW.LoadfromCacheOrDownload
UnityWebRequest’s DownloadHandlerAssetBundle (Unity 5.3 or newer)

第一种方式:

IEnumerator LoadFromMemoryAsync(string path)
    {
        AssetBundleCreateRequest createRequest = AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes(path));
        yield return createRequest;
        AssetBundle bundle = createRequest.assetBundle;
        var prefab = bundle.LoadAsset.<GameObject>("MyObject");
        Instantiate(prefab);

    }

第二种:

using UnityEngine;
using System.Collections;
public class LoadFromFileExample : MonoBehaviour
{
    void Start()
    {
        var myLoadedAssetBundle = AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, "myassetBundle"));
        if (myLoadedAssetBundle == null)
        {
            Debug.Log("Failed to load AssetBundle!");
            return;
        }
        var prefab = myLoadedAssetBundle.LoadAsset<GameObject>("MyObject");
        Instantiate(prefab);
        myLoadedAssetBundle.Unload(false);
    }
}

第三种(网络下载相关的boundle):

using UnityEngine;
using System.Collections;

public class LoadFromCacheOrDownloadExample : MonoBehaviour
{
    IEnumerator Start ()
    {
            while (!Caching.ready)
                    yield return null;
        var www = WWW.LoadFromCacheOrDownload("http://myserver.com/myassetBundle", 5);
        yield return www;
        if(!string.IsNullOrEmpty(www.error))
        {
            Debug.Log(www.error);
            yield return;
        }
        var myLoadedAssetBundle = www.assetBundle;
        var asset = myLoadedAssetBundle.mainAsset;
    }
}

第四种:

IEnumerator InstantiateObject()

    {
        string uri = "file:///" + Application.dataPath + "/AssetBundles/" + assetBundleName;        UnityEngine.Networking.UnityWebRequest request = UnityEngine.Networking.UnityWebRequest.GetAssetBundle(uri, 0);
        yield return request.Send();
        AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request);
        GameObject cube = bundle.LoadAsset<GameObject>("Cube");
        GameObject sprite = bundle.LoadAsset<GameObject>("Sprite");
        Instantiate(cube);
        Instantiate(sprite);
    }

boundle加载就完成了,但是在实际工程中,boundle不可能这么简单,我们在实际工程中应用的时候,需要具体问题具体分析。
我们要加载AssetBundleManifest时候 ,用以下代码就可以,先加载boundle,然后加载Manifest文件,分析相关的依赖项。

加载AssetBundle Manifests

AssetBundle assetBundle = AssetBundle.LoadFromFile(manifestFilePath);
AssetBundleManifest manifest = assetBundle.LoadAsset<AssetBundleManifest>("AssetBundleManifest");

猜你喜欢

转载自blog.csdn.net/u011017980/article/details/79898889