ab包(老师整合)
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); }
评论