Unity AssetBundle的几个加载方式

string path = @"AssetBundles/scene/cubewall.ab";
string cacheDownloadPath = @"file://D:\UnityWorkSpace\FifthMonthWork_Groups\AssetBundle_Demo\AssetBundles\scene\cubewall.ab";
string tempWebAddress = @"http://localhost/AssetBundles/scene/wall.ab";

//第一种加载AB的方式,异步进行加载从二进制文件中
IEnumerator LoadAB()
{
  AssetBundleCreateRequest request = AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes(path));
  yield return request;
  AssetBundle ab = request.assetBundle;
  GameObject wallPrefab = ab.LoadAsset<GameObject>("CubeWall");
  Instantiate(wallPrefab);
}

//第二种进行资源加载,同步加载
  Instantiate(AssetBundle.LoadFromMemory(File.ReadAllBytes(path)).LoadAsset<GameObject>("CubeWall"));

 

//第三种加载AB的方式,LoadFromFile【从文件进行加载】
  AssetBundle ab = AssetBundle.LoadFromFile("AssetBundles/scene/wall.ab");
  GameObject wallPrefab = ab.LoadAsset<GameObject>("Wall");
  Instantiate(wallPrefab);

 

//第四种加载AB的方式,LoadFromFileAsync【从文件进行异步加载】
IEnumerator LoadFileAsync()
{
  AssetBundleCreateRequest request = AssetBundle.LoadFromFileAsync(path);
  yield return request;

  AssetBundle ab = request.assetBundle;
  Instantiate(ab.LoadAsset<GameObject>("CubeWall"));
}

 

//第五种加载AB的方式,WWW.LoadFromCacheOrDownload - 从缓存中加载和下载

IEnumerator LoadCacheOrDownloadFromFile(string path)
{
  while (Caching.ready == false)
  yield return null;

  WWW www = WWW.LoadFromCacheOrDownload(path, 1);
  yield return www;

  if( !string.IsNullOrEmpty(www.error) )
  {
    Debug.Log(www.error);
    yield break;
  }
  AssetBundle ab = www.assetBundle;
  GameObject wallPrefab = ab.LoadAsset<GameObject>("CubeWall");
  Instantiate(wallPrefab);
}

 

//第六种加载AB的方式,UnityWebRequest,网页请求进行加载【第一种方法】
IEnumerator UseUnityWebRequest(string path)
{
//1、使用UnityWebRequest.GetAssetBundle(路径)【服务器 / 本地都可以】 去获取到网页请求
  UnityWebRequest request = UnityWebRequest.GetAssetBundle(path);
//2、等待这个请求进行发送完
  yield return request.SendWebRequest();
//3、发送完请求之后,就要从DownloadHandlerAssetBundle进行获取一个request,得到出来的是一个AssetBundle类对象
  AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request);
//4、用获取到的AssetBundle对象去加载资源泛型是GameObject
  GameObject obj = ab.LoadAsset<GameObject>("Wall");
//5、实例化出这个GameObject对象
  Instantiate(obj);
}

 

//第六种加载AB的方式,UnityWebRequest,网页请求进行加载【第二种方法】
IEnumerator UseUnityWebRequest2(string path)
{
  UnityWebRequest request = UnityWebRequest.GetAssetBundle(path);

  yield return request.SendWebRequest();

  AssetBundle ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle;

  GameObject obj = ab.LoadAsset<GameObject>("Wall");

  Instantiate(obj);
}

读取Manifest文件,获取它们的依赖关系并且加载出来

AssetBundle manifestAB = AssetBundle.LoadFromFile("AssetBundles/AssetBundles");
AssetBundleManifest manifest = manifestAB.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
string[] strArr = manifest.GetAllDependencies("scene/cubewall.ab");
foreach (var item in strArr)
{
  AssetBundle.LoadFromFile("AssetBundles/" + item);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值