今天测试那边提了个问题,就是当网络极差的时候,游戏下载将会停止(即一直在等待yield return www)当时间较长时网络恢复将无法继续下载,也没有提示,需要重启才能重新下载。因为WWW不存在设置timeout属性,因此当我们网络不好请求超时的时候,无法简单的做出判断。后面查阅资料发现Unity早在5.4版本的时候就出了新的API UnityWebRequest用于替代WWW。这边就简单的记录下UnityWebRequest的使用方法。

注:本文是在之前文章Unity 下载文件 WWW与HttpWebRequest 断点续传的基础下,添加的测试代码。所以有兴趣的同学要先看一下前文。

直接上代码,我们在DownTool.cs中添加一个新的Item,WebRequestDownloadItem

/// <summary>
/// UnityWebRequest的方式下载
/// </summary>
public class WebRequestDownloadItem : DownloadItem {UnityWebRequest m_webRequest;public WebRequestDownloadItem(string url, string path) : base(url, path) {}public override void StartDownload(Action callback = null) {base.StartDownload();UICoroutine.instance.StartCoroutine(Download(callback));}IEnumerator Download(Action callback = null) {m_webRequest = UnityWebRequest.Get(m_srcUrl);m_isStartDownload = true;m_webRequest.timeout = 30;//设置超时,若m_webRequest.SendWebRequest()连接超时会返回,且isNetworkError为trueyield return m_webRequest.SendWebRequest();m_isStartDownload = false;if(m_webRequest.isNetworkError) {Debug.Log("Download Error:" + m_webRequest.error);} else {byte[] bytes = m_webRequest.downloadHandler.data;//创建文件FileTool.CreatFile(m_saveFilePath, bytes);}if(callback != null) {callback();}}public override float GetProcess() {if(m_webRequest != null) {return m_webRequest.downloadProgress;}return 0;}public override long GetCurrentLength() {if(m_webRequest != null) {return (long)m_webRequest.downloadedBytes;}return 0;}public override long GetLength() {return 0;}public override void Destroy() {if(m_webRequest != null) {m_webRequest.Dispose();m_webRequest = null;}}
}

使用如下,在DownloadDemo的Start方法中初始化即可

m_item = new WebRequestDownloadItem(testScrUrl, Application.persistentDataPath);
m_item.StartDownload(DownloadFinish);

因为可以设置timeout时间,所以当网络不好连接超时的时候,yield return就会往下执行,并且给出error提示,我们就可以根据错误提醒玩家进行后续的操作。

UnityWebRequest,除了从服务器下载数据(downloadHandler),同样可以将数据发送到服务器(uploadHandler)以后补充。

Unity UnityWebRequest下载文件 替代WWW相关推荐

  1. Unity UnityWebRequest 下载封装

    Unity UnityWebRequest 下载封装 对unity原生的UnityWebRequest 进行二次封装 public void UnityWebRequestLoad<T>( ...

  2. Unity下载文件的方式小结

    1 UnityWebRequest下载 unity自带的下载方式,优点很明显:封装很好,使用简便,与unity使用兼容性很好且跨平台问题少:对应的缺点:扩展性差. 1.1 存在内存中供程序使用或者下载 ...

  3. Unity 最新UnityWebRequest下载,同时显示下载进度,和 显示网速,今天贴出来和大家分享

    Unity 最新UnityWebRequest下载网络资源,支持断点续传.多文件同时下载,同时显示下载进度,和 显示网速,今天贴出来和大家分享 显示网速图片 附上案例链接 可下载 https://do ...

  4. UnityWebRequest断点下载文件

    本文将运用UnityWebRequest来进行文件的断点下载. 断点下载顾名思义,就是在程序退出或者暂定下载把已经下载好的数据存储起来,在下一次下载时接着上一次开始下载,不需要重新下载,既节省时间又节 ...

  5. 在unity 中,使用http请求,下载文件到可读可写路径

    在这里我用了一个线程池,线程池参数接收一个带有object参数的,无返回值的委托 ,下载用到的核心代码,网上拷贝的,他的核心就是发起一个web请求,然后得到请求的响应,读取响应的流 剩下的都是常见的I ...

  6. unity 下载文件 断点续传

    基类 首先先创建一个基类,里面存放下载需要的一些数据,例如文件url,下载存放路径等等. public abstract class DownloadItem {/// <summary> ...

  7. Unity WebGL 下载替换Word模板数据

    文章目录 插件包介绍 一.导入自己Word模板 二.设置Word模板 三.创建报告基础数据 四.初始化下载Word 参数 五.打包WebGL 六.设置配置文件 1.文件位置 2.设置参数 3.配置文件 ...

  8. GameFramework:资源热更代码分析,检查版本信息,下载版本文件,校验版本文件,得到更新文件数量,下载文件,TaskPool

    资源下载流程图 流程跳转的日志 版本信息-版本检测-下载版本列表-下载散文件代码分析 进入ProcedureCheckVersion.OnEnter流程,进行task请求,userData为StarF ...

  9. windows主机用scp命令向Linux服务器上传和下载文件

    windows主机用scp命令向Linux服务器上传和下载文件 文章目录: 一.scp介绍 二.scp上传和下载 1.上传 2.下载 三.scp的更多参数 一.scp介绍 scp是secure cop ...

最新文章

  1. python为什么那么难学_Python入门很难吗? 为什么越来越多的人都学Python?
  2. 设置 mock_【学习】接口测试-使用mock生产随机数据
  3. 课时 27:Kubernetes 安全之访问控制(匡大虎)
  4. linux命令 - alias
  5. 周志华教授:如何做研究与写论文?(附PPT下载)
  6. 数据上报痛点解决方案
  7. 『ACM-算法-图论』算法竞赛进阶指南--hamilton路径(模板)
  8. CSS选择器的权重与优先规
  9. Silverlight HTML5 Flash - RIA技术之三足鼎立
  10. 2-6:C++快速入门之内联函数,auto关键字,C++11基于范围的for循环和nullptr
  11. echo 1+2+3+4+5“输出的结果是6
  12. overscroll-behavior称为“滚动链”
  13. 模块是python中普通的文件吗_python 包和模块
  14. 检查mysql数据库脚本_MYSQL 数据库状态检查脚本(Python版)
  15. matlab 傅里叶变换最美,MATLAB傅里叶变换
  16. 简易版双人对战五子棋
  17. pacman 查询_Pacman 命令记录
  18. 2022化工自动化控制仪表考试试题及模拟考试
  19. D. Cloud of Hashtags
  20. TCP/IP, WebSocket 和 MQTT

热门文章

  1. 吃鸡服务器维护2月8号,绝地求生正式服2月8日更新
  2. Easyu问题解决记录——datagrid多选bug
  3. 码垛工业机器人(5轴)
  4. 我要你活着——《烈日灼心》观后感
  5. 基于51单片机的时钟闹钟温度计LCD1602显示proteus仿真原理图PCB
  6. 区块链 - 哈希(Hash)
  7. 最新重点关注区块链技术,发现以太坊(etherenum)的技术进行两次分叉etz和etf。
  8. 基于Java的国际象棋的有效设计与实现
  9. 分享一个Auto.js开发的快手抢红包源码
  10. 编码器如何推流给SLS,VLC/VMIX/OBS如何播放SLS流