Unity UnityWebRequest下载文件 替代WWW
今天测试那边提了个问题,就是当网络极差的时候,游戏下载将会停止(即一直在等待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相关推荐
- Unity UnityWebRequest 下载封装
Unity UnityWebRequest 下载封装 对unity原生的UnityWebRequest 进行二次封装 public void UnityWebRequestLoad<T>( ...
- Unity下载文件的方式小结
1 UnityWebRequest下载 unity自带的下载方式,优点很明显:封装很好,使用简便,与unity使用兼容性很好且跨平台问题少:对应的缺点:扩展性差. 1.1 存在内存中供程序使用或者下载 ...
- Unity 最新UnityWebRequest下载,同时显示下载进度,和 显示网速,今天贴出来和大家分享
Unity 最新UnityWebRequest下载网络资源,支持断点续传.多文件同时下载,同时显示下载进度,和 显示网速,今天贴出来和大家分享 显示网速图片 附上案例链接 可下载 https://do ...
- UnityWebRequest断点下载文件
本文将运用UnityWebRequest来进行文件的断点下载. 断点下载顾名思义,就是在程序退出或者暂定下载把已经下载好的数据存储起来,在下一次下载时接着上一次开始下载,不需要重新下载,既节省时间又节 ...
- 在unity 中,使用http请求,下载文件到可读可写路径
在这里我用了一个线程池,线程池参数接收一个带有object参数的,无返回值的委托 ,下载用到的核心代码,网上拷贝的,他的核心就是发起一个web请求,然后得到请求的响应,读取响应的流 剩下的都是常见的I ...
- unity 下载文件 断点续传
基类 首先先创建一个基类,里面存放下载需要的一些数据,例如文件url,下载存放路径等等. public abstract class DownloadItem {/// <summary> ...
- Unity WebGL 下载替换Word模板数据
文章目录 插件包介绍 一.导入自己Word模板 二.设置Word模板 三.创建报告基础数据 四.初始化下载Word 参数 五.打包WebGL 六.设置配置文件 1.文件位置 2.设置参数 3.配置文件 ...
- GameFramework:资源热更代码分析,检查版本信息,下载版本文件,校验版本文件,得到更新文件数量,下载文件,TaskPool
资源下载流程图 流程跳转的日志 版本信息-版本检测-下载版本列表-下载散文件代码分析 进入ProcedureCheckVersion.OnEnter流程,进行task请求,userData为StarF ...
- windows主机用scp命令向Linux服务器上传和下载文件
windows主机用scp命令向Linux服务器上传和下载文件 文章目录: 一.scp介绍 二.scp上传和下载 1.上传 2.下载 三.scp的更多参数 一.scp介绍 scp是secure cop ...
最新文章
- python为什么那么难学_Python入门很难吗? 为什么越来越多的人都学Python?
- 设置 mock_【学习】接口测试-使用mock生产随机数据
- 课时 27:Kubernetes 安全之访问控制(匡大虎)
- linux命令 - alias
- 周志华教授:如何做研究与写论文?(附PPT下载)
- 数据上报痛点解决方案
- 『ACM-算法-图论』算法竞赛进阶指南--hamilton路径(模板)
- CSS选择器的权重与优先规
- Silverlight HTML5 Flash - RIA技术之三足鼎立
- 2-6:C++快速入门之内联函数,auto关键字,C++11基于范围的for循环和nullptr
- echo 1+2+3+4+5“输出的结果是6
- overscroll-behavior称为“滚动链”
- 模块是python中普通的文件吗_python 包和模块
- 检查mysql数据库脚本_MYSQL 数据库状态检查脚本(Python版)
- matlab 傅里叶变换最美,MATLAB傅里叶变换
- 简易版双人对战五子棋
- pacman 查询_Pacman 命令记录
- 2022化工自动化控制仪表考试试题及模拟考试
- D. Cloud of Hashtags
- TCP/IP, WebSocket 和 MQTT