zoukankan      html  css  js  c++  java
  • 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:AssetBundleProjectAssetBundleProjectAssetBundles", 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
        }
    }
    

      

  • 相关阅读:
    理解RESTful架构
    redis 未授权漏洞利用直接登录服务器
    初创公司应该如何做好持续集成和部署?
    Redis 作为缓存服务器的配置
    自己写的轻量级PHP框架trig与laravel5.1,yii2性能对比
    利用SecureCRT上传、下载文件(使用sz与rz命令)
    ZendStudio10 代码格式化 xml
    LESS CSS 框架简介
    为什么浏览器User-agent总是有Mozilla字样
    在 JavaScript 中 prototype 和 __proto__ 有什么区别
  • 原文地址:https://www.cnblogs.com/kanekiken/p/7851685.html
Copyright © 2011-2022 走看看