AssetBundle学习之路(四) ------ asset bundle加载及获取里面的资源

  • siki学院学习链接:http://www.sikiedu.com/my/course/74

1.总体加载流程

       1.2两步是文章所提到过的步骤:AssetBundle学习之路(一) ------ 定义/作用/打包流程

        

    打包之后的asset bundle包一般都是放在服务器端,放在APK中会有两个问题:

    •       增加APK包的大小,影响用户使用感
    •       不能使用热更新

2.加载方式:


具体查看链接:https://docs.unity3d.com/Manual/AssetBundles-Native.html

①.AssetBundle.LoadFromMemoryAsync(异步,对应还有同步方法)


②.AssetBundle.LoadFromFile(也有对应的异步方法)


③.WWW.LoadFromCacheOrDownload

如果资源是压缩的,下载的时候会开一个线程,这种下载方式会先判断缓存中有没有,没有才去服务器端下载,使用www时要判断是否有错误

                         

    WWW.LoadFromCacheOrDownload可以传CRC参数,从服务器下载asset bundle,由于网络中断或者其他问题有可能导致下载不完整的assetbundle,这时候可以用校验码判断下载的文件是否完整,不完整则重新请求服务器进行下载

④.UnityWebRequest

      使用之前首先使用NetBoxs简单的在本地搭建一个服务器

  •  首先在NetBox2.exe同一目录下新建一个html网页

                        

        index.html内容为:

                         

  • 将AssetBundles文件夹放入NetBox2.exe同一目录,同时运行netbox2.exe启动服务器

                      

  • 测试:

        UnityWebRequest官方代码:

               

       测试代码:

     string uri = @"http://localhost/AssetBundles/cubewall.unity3d";
        UnityWebRequest request = UnityWebRequest.GetAssetBundle(uri);
        yield return request.Send();
        //两种方式可以得到asset bundle对象
        //AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request);
        AssetBundle ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle;//request.downloadHandler可以转化为多种对象
        
        //使用里面的资源
        GameObject wallPrefab = ab.LoadAsset<GameObject>("CubeWall");
        Instantiate(wallPrefab);

    本地测试:

      string uri = @"file:///E:\Unity Project Workspace\AssetBundleProject\AssetBundles\cubewall.unity3d";//注意3个斜杠,其他代码都一样

3.加载内容

      可以加载图片(Texture)或者预制体(GameObject)或者声音(AudioClip)等等看,同时分为同步和异步两种加载方式

                


     

猜你喜欢

转载自blog.csdn.net/dengshunhao/article/details/80486774
今日推荐