Unity UnityWebRequest 下载

UnityWebRequest下载,Unity自带的下载方式。

一、存在内存中供程序使用或者下载一些小文件
优点很明显:封装很好,使用简便,与unity使用兼容性很好且跨平台问题少;
对应的缺点:扩展性差。

   public IEnumerator DownloadFile(string url, string contentName)
    {
        string downloadFileName = "";
#if UNITY_EDITOR
        downloadFileName = Path.Combine(Application.dataPath, contentName);
#elif UNITY_ANDROID
        downloadFileName = Path.Combine(Application.streamingAssetsPath, contentName);
#endif
        using (UnityWebRequest webRequest = UnityWebRequest.Get(url))
        {
            yield return webRequest.SendWebRequest();
            if (webRequest.isNetworkError)
            {
                Debug.LogError(webRequest.error);
            }
            else
            {
                DownloadHandler fileHandler = webRequest.downloadHandler;
                using (MemoryStream memory = new MemoryStream(fileHandler.data))
                {
                    byte[] buffer = new byte[1024 * 1024];
                    FileStream file = File.Open(downloadFileName, FileMode.OpenOrCreate);
                    int readBytes;
                    while ((readBytes = memory.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        file.Write(buffer, 0, readBytes);
                    }
                    file.Close();
                }
            }
        }
    }
 

 

二、使用Unity新增了DownloadHandlerFile的支持函数,可以直接将文件下载到外存。

 public IEnumerator DownloadVideoFile01(Uri uri, string downloadFileName, Slider sliderProgress )
    {
        using (UnityWebRequest downloader = UnityWebRequest.Get(uri))
        {
            downloader.downloadHandler = new DownloadHandlerFile(downloadFileName);
            downloader.SendWebRequest();
            //同步进度
            while (!downloader.isDone)
            {
                sliderProgress.value = downloader.downloadProgress;
                sliderProgress.GetComponentInChildren<Text>().text = (downloader.downloadProgress* 100).ToString("F2") + "%";
                yield return null;
            }
 
            if (downloader.error != null)
            {
                Debug.LogError(downloader.error);
            }
            else
            {
                //完成
                sliderProgress.value = 1f;
                sliderProgress.GetComponentInChildren<Text>().text = 100.ToString("F2") + "%";
            }
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值