前言
Unity官方从2018开始,已经不推荐使用WWW了,更推荐使用UnityWebRequest,UnityWebRequest的使用方法和WWW类似,都是使用协程的方式来等待网络回复,但是存在几个问题:
1.协程只能在Unity运行时使用。所以编辑器工具如果要做网络请求,就没法用协程了。
2.协程是同步阻塞的方式,无法做大量数据的异步请求。
3.协程不太容易做请求数据的返回。
出于对以上问题的考虑,而我的需求又是需要做批量的http请求,所以不得不使用异步的方式来实现。
故有了今天的解决方案,遂记录下来,供大家参考。
Get请求
Get请求是最简单的,参数都在URL的?后面,所以也没有什么特殊注意事项,使用异步async-await方式请求即可,代码如下:
/// <summary>
/// Post请求json数据
/// </summary>
/// <param name="url"></param>
static async Task<string> RequestGet(string url)
{
// 创建UnityWebRequest对象
UnityWebRequest www = UnityWebRequest.Get(url);
www.downloadHandler = new DownloadHandlerBuffer();
// 发送请求并等待响应
await www.SendWebRequest();
// 处理响应
if (www.result != UnityWebRequest.Result.Success)
{
Debug.Log(www.error);
return null;
}
else
{
Debug.Log("Form upload complete!");
return www.downloadHandler.text;
}
}
Post请求
Post请求稍微麻烦一些,因为我们要带上表头数据,比如Json格式的表头数据,使用async-await方式请求,代码如下:文章来源:https://www.toymoban.com/news/detail-724600.html
/// <summary>
/// Post请求json数据
/// </summary>
/// <param name="url">URL</param>
/// <param name="jsonArgs">请求json数据</param>
/// <summary>
/// Post请求json数据
/// </summary>
/// <param name="url">URL</param>
/// <param name="jsonArgs">请求json数据</param>
static async Task<string> RequestPost(string url, string jsonArgs)
{
// 创建UnityWebRequest对象
UnityWebRequest www = UnityWebRequest.Post(url, "");
byte[] postBytes = Encoding.UTF8.GetBytes(jsonArgs);
www.uploadHandler = new UploadHandlerRaw(postBytes);
www.downloadHandler = new DownloadHandlerBuffer();
www.SetRequestHeader("Content-Type", "application/json");
// 发送请求并等待响应
await www.SendWebRequest();
// 处理响应
if (www.result != UnityWebRequest.Result.Success)
{
Debug.Log(www.error);
return null;
}
else
{
Debug.Log("Form upload complete!");
return (www.downloadHandler.text);
}
}
文件下载
以前做文件下载,可能会使用HttpWebRequest,然后对返回的数据流进行读取,等待流读取完毕,再写入到本地,代码会相对复杂一些。现在UnityWebRequest对文件的下载支持相对比较好了,我们不需要在使用原生的HttpWebRequest了,下面来看下如何使用异步方式async-await来实现大文件下载,代码如下:文章来源地址https://www.toymoban.com/news/detail-724600.html
/// <summary>
/// 下载文件
/// </summary>
/// <param name="url">下载地址</param>
/// <param name="filePath">文件保存地址</param>
static async Task<bool> DownloadFile(string url, string filePath)
{
UnityWebRequest www = UnityWebRequest.Get(url);
// 发送请求并等待响应
await www.SendWebRequest();
// 处理响应
if (www.result != UnityWebRequest.Result.Success)
{
Debug.Log(www.error);
return false;
}
else
{
// 将响应数据写入本地文件
Debug.Log("File download complete!");
File.WriteAllBytes(filePath, www.downloadHandler.data);
return true;
}
}
到了这里,关于Unity 如何实现异步UnityWebRequest请求的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!