using System.Collections;
using UnityEngine;
using UnityEngine.Networking; /// <summary>
/// 网络请求测试
/// </summary>
public class ChinarWebRequest : MonoBehaviour
{
void Start()
{
StartCoroutine(SendRequest());
} /// <summary>
/// 开启一个协程,发送请求
/// </summary>
/// <returns></returns>
IEnumerator SendRequest()
{
Uri uri = new Uri("http://www.baidu.com"); //Uri 是 System 命名空间下的一个类,注意引用该命名空间
UnityWebRequest uwr = new UnityWebRequest(uri); //创建UnityWebRequest对象
uwr.timeout = 5;
yield return uwr.SendWebRequest(); //等待返回请求的信息
if (uwr.isHttpError || uwr.isNetworkError) //如果其 请求失败,或是 网络错误
{
Debug.LogError(uwr.error); //打印错误原因
}
else //请求成功
{
Debug.Log("请求成功");
}
}
}

Get方法

Get 方法为创建一个http为传入url的 UnityWebReqest 对象

using System;
using System.Collections;
using UnityEngine;
using UnityEngine.Networking; /// <summary>
/// 网络请求测试
/// </summary>
public class ChinarWebRequest : MonoBehaviour
{
void Start()
{
StartCoroutine(SendRequest());
} /// <summary>
/// 开启一个协程,发送请求
/// </summary>
/// <returns></returns>
IEnumerator SendRequest()
{
UnityWebRequest uwr = UnityWebRequest.Get("http://www.baidu.com"); //创建UnityWebRequest对象
yield return uwr.SendWebRequest(); //等待返回请求的信息
if (uwr.isHttpError || uwr.isNetworkError) //如果其 请求失败,或是 网络错误
{
Debug.Log(uwr.error); //打印错误原因
}
else //请求成功
{
Debug.Log("Get:请求成功");
Debug.Log(uwr.downloadedBytes);
}
}
}

Post方法

Post方法将一个表上传到远程的服务器,一般来说我们登陆某个网站的时候会用到这个方法,我们的账号密码会以一个表单的形式传过去

using System.Collections;
using UnityEngine;
using UnityEngine.Networking; /// <summary>
/// 网络请求测试
/// </summary>
public class ChinarWebRequest : MonoBehaviour
{
void Start()
{
StartCoroutine(Post());
}
/// <summary>
/// 开启一个协程,发送请求
/// </summary>
/// <returns></returns>
IEnumerator Post()
{
WWWForm form = new WWWForm();
//键值对
form.AddField("key", "value");
form.AddField("name", "Chinar");
//请求链接,并将form对象发送到远程服务器
UnityWebRequest webRequest = UnityWebRequest.Post("http://www.baidu.com", form); yield return webRequest.SendWebRequest();
if (webRequest.isHttpError || webRequest.isNetworkError)
{
Debug.Log(webRequest.error);
}
else
{
Debug.Log("发送成功");
}
}
}

Put方法

Put方法将数据发送到远程的服务器

using System.Collections;
using UnityEngine;
using UnityEngine.Networking; /// <summary>
/// 网络请求测试
/// </summary>
public class ChinarWebRequest : MonoBehaviour
{
void Start()
{
StartCoroutine(Upload());
} /// <summary>
/// 开启协程
/// </summary>
/// <returns></returns>
IEnumerator Upload()
{
byte[] myData = System.Text.Encoding.UTF8.GetBytes("执著的测试数据");
using (UnityWebRequest uwr = UnityWebRequest.Put("http://www.baidu.com", myData))
{
yield return uwr.SendWebRequest(); if (uwr.isNetworkError || uwr.isHttpError)
{
Debug.Log(uwr.error);
}
else
{
Debug.Log("上传成功!");
}
}
}
}

Head方法

Head方法与Get方法用法一致,都是传入一个Url

/// <summary>
/// 开启一个协程,发送请求
/// </summary>
/// <returns></returns>
IEnumerator SendRequest1()
{
UnityWebRequest uwr = UnityWebRequest.Head("http://www.chinar.xin/chinarweb/WebRequest/Get/00-效果.mp4"); //创建UnityWebRequest对象
yield return uwr.SendWebRequest(); //等待返回请求的信息
if (uwr.isHttpError || uwr.isNetworkError) //如果其 请求失败,或是 网络错误
{
Debug.Log(uwr.error); //打印错误原因
}
else //请求成功
{
Debug.Log("Head:请求成功");
}
}

GetResponseHeader方法

GetResponseHeader方法可以用来获取请求文件的长度 传入参数 “Content-Length” 字符串,表示获取文件内容长度。

/// <summary>
/// 开启一个协程,发送请求
/// </summary>
/// <returns></returns>
IEnumerator SendRequest1()
{
UnityWebRequest uwr = UnityWebRequest.Head("http://www.chinar.xin/chinarweb/WebRequest/Get/00-效果.mp4"); //创建UnityWebRequest对象
yield return uwr.SendWebRequest(); //等待返回请求的信息
if (uwr.isHttpError || uwr.isNetworkError) //如果其 请求失败,或是 网络错误
{
Debug.Log(uwr.error); //打印错误原因
}
else //请求成功
{
long totalLength = long.Parse(huwr.GetResponseHeader("Content-Length")); //首先拿到文件的全部长度
Debug.Log("totalLength");//打印文件长度
}
}

下载文件

using System;
using System.Collections;
using System.IO;
using UnityEditor;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI; public class ChinarDownLoadFile : MonoBehaviour
{
public Slider ProgressBar; //进度条
public Text SliderValue; //滑动条值 private Button startBtn; //开始按钮 void Start()
{
//初始化进度条和文本框
ProgressBar.value = 0;
SliderValue.text = "0.0%";
startBtn = GameObject.Find("Start Button").GetComponent<Button>();
startBtn.onClick.AddListener(OnClickStartDownload);
} /// <summary>
/// 回调函数:开始下载
/// </summary>
public void OnClickStartDownload()
{
StartCoroutine(DownloadFile());
} /// <summary>
/// 协程:下载文件
/// </summary>
IEnumerator DownloadFile()
{
UnityWebRequest uwr = UnityWebRequest.Get("http://www.linxinfa.test.mp4.mp4"); //创建UnityWebRequest对象,将Url传入
uwr.SendWebRequest(); //开始请求
if (uwr.isNetworkError || uwr.isHttpError) //如果出错
{
Debug.Log(uwr.error); //输出 错误信息
}
else
{
while (!uwr.isDone) //只要下载没有完成,一直执行此循环
{
ProgressBar.value = uwr.downloadProgress; //展示下载进度
SliderValue.text = Math.Floor(uwr.downloadProgress * 100) + "%";
yield return 0;
} if (uwr.isDone) //如果下载完成了
{
print("完成");
ProgressBar.value = 1; //改变Slider的值
SliderValue.text = 100 + "%";
} byte[] results = uwr.downloadHandler.data;
// 注意真机上要用Application.persistentDataPath
CreateFile(Application.streamingAssetsPath + "/MP4/test.mp4", results, uwr.downloadHandler.data.Length);
AssetDatabase.Refresh(); //刷新一下
}
} /// <summary>
/// 这是一个创建文件的方法
/// </summary>
/// <param name="path">保存文件的路径</param>
/// <param name="bytes">文件的字节数组</param>
/// <param name="length">数据长度</param>
void CreateFile(string path, byte[] bytes, int length)
{
Stream sw;
FileInfo file = new FileInfo(path);
if (!file.Exists)
{
sw = file.Create();
}
else
{
return;
} sw.Write(bytes, 0, length);
sw.Close();
sw.Dispose();
}
}

UnityWebRequest使用总结的更多相关文章

  1. UnityWebRequest http post json通信

    unity3d 提供了一个用于http通信的类叫:UnityWebRequest,它是www的替代者,所以建议使用这个类.我们这个例子以json格式与服务器通信.这里使用的json组件是:Newton ...

  2. Unity UnityWebRequest实现与后端的交互

    一般我们与后端对接的时候会用到UnityWebRequest这里简单使用这个与后端进行交互这个是总类 using UnityEngine;using System.Collections;using ...

  3. 【转载】UnityWebRequest的初步使用及常用方法解析

    文章来源:https://blog.csdn.net/qwe25878/article/details/85051911#_35 今天,来学习一下Unity新的网络请求方式UnityWebReques ...

  4. 通过UnityWebRequest得到的纹理转精灵

    private IEnumerator GetImage(string url, Image fileImage) { UnityWebRequest WebRequest = new UnityWe ...

  5. Unity5和WebGL移植指南的一些总结

    对于手游开发者来说,更新版本往往意味着非常复杂的过程,你需要根据反馈做更新.测试.提交然后等待审核,而由于不需要客户端依赖,页游往往是快速测试游戏版本的最佳途径,很多人可能都知道Unity 5可以再不 ...

  6. 【转】Unity中的协同程序-使用Promise进行封装(三)

    原文:http://gad.qq.com/program/translateview/7170967 译者:崔国军(飞扬971)    审校:王磊(未来的未来) 在这个系列的最后一部分文章,我们要通过 ...

  7. 【转】Unity中的协同程序-使用Promise进行封装(一)

    原文:http://gad.qq.com/program/translateview/7170767 译者:陈敬凤(nunu)    审校:王磊(未来的未来) 每个Unity的开发者应该都对协同程序非 ...

  8. Unity AssetBundles and Resources指引 (四) AssetBundle使用模式

    本文内容主要翻译自下面这篇文章 https://unity3d.com/cn/learn/tutorials/topics/best-practices/guide-assetbundles-and- ...

  9. Unity AssetBundles and Resources指引 (三) AssetBundle基础

    本文内容主要翻译自下面这篇文章 https://unity3d.com/cn/learn/tutorials/topics/best-practices/guide-assetbundles-and- ...

随机推荐

  1. 聊一聊 JVM 的 GC

    原文链接:https://www.changxuan.top/?p=1457 引言 JVM 中的 GC 在技术博客中应该算是个老生常谈的话题,网络上也存在着许多质量参差不齐的文章,可以看出来大都是&q ...

  2. MSSQL·备份数据库中的单表

    阅文时长 | 0.11分钟 字数统计 | 237.6字符 主要内容 | 1.引言&背景 2.声明与参考资料 『MSSQL·备份数据库中的单表』 编写人 | SCscHero 编写时间 | 20 ...

  3. .NET平台系列8 .NET Core 各版本新功能

    系列目录     [已更新最新开发文章,点击查看详细] .NET Core 自2016年6月27日发布第一个正式版本以来,它主打的跨平台和高性能特效吸引了许多开发者,包括Java.PHP等语言的开发者 ...

  4. Scala 神奇的下划线 _

    引言 在 Scala 中,下划线 _ 有很多种用法,作为 Scala 初学者也经常被下划线 _ 搞得晕头转向,下面是对 Scala 中下划线 _ 使用的简单总结~ 导包时, 下划线 _ 表示引用多个方 ...

  5. Could not open device at /dev/ipmi0

    Could not open device at /dev/ipmi0 分类: LINUX 2013-09-02 17:01:37   Could not open device at /dev/ip ...

  6. ArcGIS10从入门到精通系列实验图文教程(附配套实验数据持续更新)

    @ 目录 1. 专栏简介 2. 专栏地址 3. 专栏目录 1. 专栏简介 本教程<ArcGIS从入门到精通系列实验教程>内容包括:ArcGIS平台简介.ArcGIS应用基础.空间数据的采集 ...

  7. 『动善时』JMeter基础 — 33、JMeter察看结果树的显示模式详解

    目录 1.CSS Selector Tester视图 2.HTML查看器 (1)HTML视图 (2)HTML(download resources)视图 (3)HTML Source Formatte ...

  8. supervisor 使 celery后台运行

    1.安装 supervisor pip install supervisor  2.创建supervisor配置文件,命令如下: 进入项目文件 echo_supervisord_conf > s ...

  9. 在windows上 使用celery 报错

    在windows上 使用celery 报错       在windows上 使用celery 报错 ValueError: not enough values to unpack (expected ...

  10. App自动化测试之Appium环境安装(涉及雷电模拟器和真机)

    1.安装Microsoft .NET Framework 4.5 及以上版本 2.安装Appium 官方网站地址:http://appium.io/ 我装了1.17.0版本 3.安装JDK 1.8及以 ...