unity 下载服务器端assetbundle资源包到本地,并且加载资源

将assetbundle资源包存放到服务器上。

IEnumerator SaveAssetBundle(string path, string filename, Action DownLoad = null)
    {
        //服务器上的文件路径
        string originPath = path + filename;
        Debug.Log("originPath:"+originPath);
        using (webRequest = UnityWebRequest.Get(originPath))
        {

            yield return webRequest.SendWebRequest();
            Debug.Log(webRequest);

            if (webRequest.isNetworkError)
            {
                Debug.Log("Download Error:" + webRequest.error);
            }
            else{
                //下载完成后执行的回调
                if (webRequest.isDone)
                {
                    byte[] results = webRequest.downloadHandler.data;
                    string savePath = Application.persistentDataPath + "/screen";

                    if (!Directory.Exists(savePath))
                    {
                        Directory.CreateDirectory(savePath);
                    }
                    
                    Debug.Log("savepath:" + savePath + "/" + filename);
                    FileInfo fileInfo = new FileInfo(savePath + "/" + filename);
                    FileStream fs = fileInfo.Create();
                    //fs.Write(字节数组, 开始位置, 数据长度);
                    fs.Write(results, 0, results.Length);
                    fs.Flush(); //文件写入存储到硬盘
                    fs.Close(); //关闭文件流对象
                    fs.Dispose(); //销毁文件对象
                    if (DownLoad != null)
                    {
                        DownLoad();
                    }

                }

            } 
            
        }
    }

使用 UnityWebRequest.Get(url),将资源下载到本地路径下。

我是要发布带ios平台上的,所以要将模型下载到可以进行读写的文件加下,

ios下经常使用的路径为:

Application.dataPath            /var/containers/Bundle/Application/app sandbox/xxx.app/Data
Application.streamingAssetsPath /var/containers/Bundle/Application/app sandbox/test.app/Data/Raw
Application.temporaryCachePath /var/mobile/Containers/Data/Application/app sandbox/Library/Caches
Application.persistentDataPath  /var/mobile/Containers/Data/Application/app sandbox/Documents

dataPath是app程序包安装路径,app本身就在这里,此目录是只读的。streamingAssetsPath是dataPath下的Raw目录。

app的独立数据存储目录下有三个文件夹:Documents,Library和tmp。
Documents目录,这个目录用于存储需要长期保存的数据,比如我们的热更新内容就写在这里。需要注意的是,iCloud会自动备份此目录,如果此目录下写入的内容较多,审核的可能会被苹果拒掉。

Library目录,这个目录下有两个子目录,Caches和Preferences。
    Caches是一个相对临时的目录,适合存放下载缓存的临时文件,空间不足时可能会被系统清除,Application.temporaryCachePath返回的就是此路径。我把热更新的临时文件写在这里,等一个版本的所有内容更新完全后,再把内容转移到Documents目录。
    Preferences用于应用存储偏好设置,用NSUserDefaults读取或设置。

tmp目录,临时目录,存放应用运行时临时使用的数据。
需要注意的是,以上无论临时、缓存或者普通目录,如果不需要的数据,都请删除。不要占用用户的存储空间,像微信就是坏榜样。

经过分析:我们要将资源下载到Application.persistentDataPath 下

 public void DownLoad() {
        AssetBundle chashi = AssetBundle.LoadFromFile(Application.persistentDataPath + "/screen/chashi.molion");
        GameObject chashipre = chashi.LoadAsset<GameObject>("Cube");
        GameObject.Instantiate(chashipre, Vector3.zero, Quaternion.identity);
    }

加载资源到场景中。

        StartCoroutine(SaveAssetBundle("服务器地址", "chashi.molion", DownLoad));

接下来就是将工程发布到ios设备上。

运行程序可能会出现程序闪退的问题,可能是unity开启Strip Engine Code选项后带来的崩溃问题,所以需要打包的时候将player Settings->other Settings下的Strip Engine Code*勾去掉,重新打包发布

加载成功

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小猴子编程

请支持一下我的分享

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

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

打赏作者

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

抵扣说明:

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

余额充值