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

本文介绍了Unity中AssetBundle的基本概念、打包后的存放位置选择及其原因,并详细讲解了四种主要的AssetBundle加载方式:LoadFromMemoryAsync、LoadFromFile、WWW.LoadFromCacheOrDownload及UnityWebRequest。文中还提供了具体的代码实例,帮助开发者理解如何使用这些方法加载资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

  • 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个斜杠,其他代码都一样

  如果想要保存到本地,可使用如下代码:

 public IEnumerator LoadABRes()
    {
        request = UnityWebRequest.Get(uri);
        Debug.Log(request);
        yield return request.SendWebRequest();
        CreatFile(Application.persistentDataPath + "/"+ "AB.txt", request.downloadHandler.data, request.downloadHandler.data.Length);
         AssetBundle ab=AssetBundle.LoadFromFile(Application.persistentDataPath + "/"+ "AB.txt");
    }
void CreatFile(string path, byte[] file, int length)
{
    Stream sw;
    FileInfo File = new FileInfo(path);
    if (!File.Exists)
    {
        sw = File.Create();
    }
    else
    {
        return;
    }
    sw.Write(file, 0, length);
    sw.Close();
    sw.Dispose();
}

3.加载内容

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

                

 

     

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千喜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值