Unity加载AssetBundle的方法
Posted Carlos
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity加载AssetBundle的方法相关的知识,希望对你有一定的参考价值。
using System.Collections; using System.Collections.Generic; using UnityEngine; using System.IO; using UnityEngine.Networking; public class DownLoad : MonoBehaviour { IEnumerator Start() { //资源包路径 string path1 = "AssetBundles/cubewall.unity3d"; //共享依赖资源包路径 string path2 = "AssetBundles/share.unity3d"; //第一种加载AB的方式 ,从内存中加载 LoadFromMemory #region //方法一:异步加载 //加载资源 AssetBundleCreateRequest request = AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes(path1)); yield return request; //加载共同依赖资源,如贴图、材质 AssetBundleCreateRequest request2 = AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes(path2)); yield return request2; AssetBundle ab = request.assetBundle; AssetBundle ab2 = request2.assetBundle; //使用里面的资源 GameObject wallPrefab1 = (GameObject) ab.LoadAsset("CubeWall"); Instantiate(wallPrefab1); //方法二:同步加载(无需用协程) //加载资源 AssetBundle ab3 = AssetBundle.LoadFromMemory(File.ReadAllBytes(path1)); //加载共同依赖资源,如贴图、材质 AssetBundle ab4 = AssetBundle.LoadFromMemory(File.ReadAllBytes(path2)); //使用里面的资源 GameObject wallPrefab2 = (GameObject) ab.LoadAsset("CubeWall"); Instantiate(wallPrefab2); #endregion //第二种加载AB的方式 ,从本地加载 LoadFromFile(无需用协程) #region AssetBundle ab5 = AssetBundle.LoadFromFile(path1); AssetBundle ab6 = AssetBundle.LoadFromFile(path2); GameObject wallPrefab3 = (GameObject) ab5.LoadAsset("CubeWall"); Instantiate(wallPrefab3); #endregion //第三种加载AB的方式 ,从本地或服务器加载 WWW(将被弃用) #region //是否准备好 while (Caching.ready == false) { yield return null; } //从本地加载 //WWW www = WWW.LoadFromCacheOrDownload(@"file:/E:AssetBundleProject\AssetBundleProject\AssetBundles", 1); //从服务器加载 WWW www = WWW.LoadFromCacheOrDownload(@"http://localhost/AssetBundles/cubewall.unity3d", 1); yield return www; //是否报错 if (string.IsNullOrEmpty(www.error) == false) { Debug.Log(www.error); yield break; } AssetBundle ab7 = www.assetBundle; //使用里面的资源 GameObject wallPrefab4 = (GameObject) ab7.LoadAsset("CubeWall"); Instantiate(wallPrefab4); #endregion //第四种加载AB方式 从服务器端下载 UnityWebRequest(新版Unity使用) #region //服务器路径 localhost为IP string uri = @"http://localhost/AssetBundles/cubewall.unity3d"; UnityWebRequest request3 = UnityWebRequest.GetAssetBundle(uri); yield return request3.Send(); //AssetBundle ab8 = ((DownloadHandlerAssetBundle)request3.downloadHandler).assetBundle; AssetBundle ab8 = DownloadHandlerAssetBundle.GetContent(request3); //使用里面的资源 GameObject wallPrefab5 = (GameObject) ab8.LoadAsset("CubeWall"); Instantiate(wallPrefab5); //加载cubewall.unity3d资源包所依赖的资源包 AssetBundle manifestAB = AssetBundle.LoadFromFile("AssetBundles/AssetBundles"); AssetBundleManifest manifest = (AssetBundleManifest) manifestAB.LoadAsset("AssetBundleManifest"); //foreach(string name in manifest.GetAllAssetBundles()) //{ // print(name); //} //cubewall.unity3d资源包所依赖的资源包的名字 string[] strs = manifest.GetAllDependencies("cubewall.unity3d"); foreach (string name in strs) { AssetBundle.LoadFromFile("AssetBundles/" + name); } #endregion } }
以上是关于Unity加载AssetBundle的方法的主要内容,如果未能解决你的问题,请参考以下文章
Unity3D资源异步加载——AssetBundle资源打包加载
[Unity]浅谈AssetBundle的依赖关系打包与加载