AssetBundle的加载

2017-10-23  本文已影响571人  晓龙酱

AssetBundle.LoadFromMemoryAsync

AssetBundleCreateRequest LoadFromMemoryAsync(byte[] binary, uint crc = 0);
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);

}

AssetBundle.LoadFromFile

AssetBundle LoadFromFile(string path, uint crc = 0, ulong offset = 0); 
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);

WWW.LoadFromCacheOrDownload

WWW LoadFromCacheOrDownload(string url, int version);
IEnumerator Start()
{
    while (!Caching.ready)
        yield return null;

    var www = WWW.LoadFromCacheOrDownload("http://myserver.com/myassetBundle.unity3d", 5);
    yield return www;
    if (!string.IsNullOrEmpty(www.error))
    {
        Debug.Log(www.error);
        yield return null;
    }
    var myLoadedAssetBundle = www.assetBundle;

    var asset = myLoadedAssetBundle.mainAsset;
}

ab缓存由Caching类管理,Caching还可以用来做ab备份以及回滚。

https://docs.unity3d.com/ScriptReference/Caching.html

由于www的性能问题,使用这个接口时需要注意:

其它:

UnityWebRequest

UnityWebRequest UnityWebRequest.GetAssetBundle(string uri, uint crc);

AssetBundle DownloadHandlerAssetBundle.GetContent(Networking.UnityWebRequest www);
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);
}

LoadAsset

GameObject gameObject = loadedAssetBundle.LoadAsset<GameObject>(assetName);

Unity.Object[] objectArray = loadedAssetBundle.LoadAllAssets();
AssetBundleRequest request = loadedAssetBundleObject.LoadAssetAsync<GameObject>(assetName);
yield return request;
var loadedAsset = request.asset;
AssetBundleRequest request = loadedAssetBundle.LoadAllAssetsAsync();
yield return request;
var loadedAssets = request.allAssets;

Load Manifests

AssetBundle assetBundle = AssetBundle.LoadFromFile(manifestFilePath);
AssetBundleManifest manifest = assetBundle.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
AssetBundle assetBundle = AssetBundle.LoadFromFile(manifestFilePath);
AssetBundleManifest manifest = assetBundle.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
string[] dependencies = manifest.GetAllDependencies("assetBundle"); //Pass the name of the bundle you want the dependencies for.
foreach(string dependency in dependencies)
{
    AssetBundle.LoadFromFile(Path.Combine(assetBundlePath, dependency));
}

其它

https://docs.unity3d.com/Manual/AssetBundles-Native.html

上一篇 下一篇

猜你喜欢

热点阅读