最近整理了Unity中关于AssetBundle加载方式的整理,代码如下
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.Networking;
public class LoadBundle : MonoBehaviour
{
/// <summary>
/// 下载assetbundle
/// </summary>
/// <param name="url"></param>
/// <param name="callBack"></param>
/// <returns></returns>
public static IEnumerator GetAssetBoundle(string url, Action<AssetBundle> callBack)
{
UnityWebRequest webRequest = new UnityWebRequest(url);
DownloadHandlerAssetBundle handler = new DownloadHandlerAssetBundle(webRequest.url, uint.MinValue);
webRequest.downloadHandler = handler;
if (!string.IsNullOrEmpty("UserToken"))
webRequest.SetRequestHeader("Authorization", "UserToken");
yield return webRequest.SendWebRequest();
if (webRequest.isNetworkError || webRequest.isHttpError)
{
Debug.LogError(webRequest.responseCode + webRequest.error + ":" + url);
}
else
{
callBack(handler.assetBundle);
}
// AssetBundle ab = DownloadHandlerAssetBundle.GetContent(webRequest);
}
/// <summary>
/// path= @"file://" + FolderPath+@"\"+ fol.Name;本地资源路径
/// </summary>
/// <param name="url"></param>
/// <param name="callBack"></param>
/// <returns></returns>
public static IEnumerator GetAssetBoundle02(string url, Action<AssetBundle> callBack)
{
while (Caching.ready == false)
yield return null;
WWW www = WWW.LoadFromCacheOrDownload(url, 1);
yield return www;
if (!string.IsNullOrEmpty(www.error))
{
Debug.Log(www.error);
yield break;
}
AssetBundle ab = www.assetBundle;
callBack(ab);
}
/// <summary>
/// 异步进行加载从二进制文件中
/// </summary>
/// <param name="url"></param>
/// <param name="callBack"></param>
/// <returns></returns>
IEnumerator GetAssetBoundle03(string url, Action<AssetBundle> callBack)
{
AssetBundleCreateRequest request = AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes(url));
yield return request;
AssetBundle ab = request.assetBundle;
callBack(ab);
}
/// <summary>
/// 进行资源加载,同步加载
/// </summary>
/// <param name="url"></param>
/// <param name="callBack"></param>
void GetAssetBoundle04(string url, Action<AssetBundle> callBack)
{
AssetBundle ab= AssetBundle.LoadFromMemory(File.ReadAllBytes(url));
callBack(ab);
}
/// <summary>
/// LoadFromFile【从文件进行加载】
/// </summary>
/// <param name="url"></param>
/// <param name="callBack"></param>
void GetAssetBoundle05(string url, Action<AssetBundle> callBack)
{
AssetBundle ab = AssetBundle.LoadFromFile(url);
callBack(ab);
}
/// <summary>
/// LoadFromFileAsync【从文件进行异步加载】
/// </summary>
/// <param name="url"></param>
/// <param name="callBack"></param>
/// <returns></returns>
IEnumerator GetAssetBoundle06(string url, Action<AssetBundle> callBack)
{
AssetBundleCreateRequest request = AssetBundle.LoadFromFileAsync(url);
yield return request;
AssetBundle ab = request.assetBundle;
callBack(ab);
}
public void HandleBundle(AssetBundle assetBundle)
{
var obj = assetBundle.LoadAllAssets();
GameObject go = assetBundle.LoadAsset<GameObject>(obj[0].name);
Instantiate(go);
}
}