54.网络通信-Unity网络类-UnityWebRequest类-常用获取数据
54.1 知识点
UnityWebRequest 是什么?
UnityWebRequest 是什么?
- UnityWebRequest 是 Unity 提供的一个模块化的系统类,用于构建 HTTP 请求和处理 HTTP 响应。
- 主要目标是实现 Unity 游戏与 Web 服务端的交互,将之前的 WWW 相关功能集成在其中,因此在新版本中建议使用 UnityWebRequest 类来代替 WWW 类。
注意:
- UnityWebRequest 和 WWW 一样,需要配合协程使用。
- 支持 http、ftp、file 协议下载或加载资源。
- 能够上传文件到 HTTP 资源服务器。
UnityWebRequest 类的常用操作
使用 Get 请求获取文本或二进制数据
使用 Get 请求获取纹理数据
使用 Get 请求获取 AB 包数据
使用 Post 请求发送数据
使用 Put 请求上传数据
Get 获取操作
UnityWebRequest.Get 获取文本或二进制
IEnumerator LoadText()
{
UnityWebRequest unityWebRequest = UnityWebRequest.Get("http://192.168.1.101:8000/HTTPRoot/test.txt");
//会等待服务器端响应后 断开连接后 再继续执行后面的内容
yield return unityWebRequest.SendWebRequest();
//如果处理成功 结果就是成功枚举
if (unityWebRequest.result == UnityWebRequest.Result.Success)
{
//UnityWebRequest的downloadHandler属性是下载处理器 负责管理由UnityWebRequest从远程服务器接收的主体数据。
//文本字符串
print(unityWebRequest.downloadHandler.text);
//字节数组
byte[] bytes = unityWebRequest.downloadHandler.data;
print("字节数组长度" + bytes.Length);
}
else
{
print("获取失败:" + unityWebRequest.result + unityWebRequest.error + unityWebRequest.responseCode);
}
}
//获取文本或2进制
StartCoroutine(LoadText());
UnityWebRequest.GetTexture 获取纹理
IEnumerator LoadTexture()
{
//UnityWebRequest unityWebRequest = UnityWebRequestTexture.GetTexture("http://192.168.1.101:8000/HTTPRoot/pic.png");
//UnityWebRequest unityWebRequest = UnityWebRequestTexture.GetTexture("ftp://127.0.0.1/pic.png");
UnityWebRequest unityWebRequest = UnityWebRequestTexture.GetTexture("file://" + Application.streamingAssetsPath + "/test.png");
yield return unityWebRequest.SendWebRequest();
if (unityWebRequest.result == UnityWebRequest.Result.Success)
{
//可以把UnityWebRequest的downloadHandler属性as成DownloadHandlerTexture纹理下载类得到其中的纹理
//rawImage.texture = (unityWebRequest.downloadHandler as DownloadHandlerTexture).texture;
//也可以用DownloadHandlerTexture纹理下载类的GetContent方法传入UnityWebRequest对象得到纹理 这两种方法都可以
rawImage.texture = DownloadHandlerTexture.GetContent(unityWebRequest);
}
else
print("获取失败" + unityWebRequest.error + unityWebRequest.result + unityWebRequest.responseCode);
}
//获取纹理
StartCoroutine(LoadTexture());
UnityWebRequestAssetBundle.GetAssetBundle 获取AB包
IEnumerator LoadAssetBundle()
{
UnityWebRequest unityWebRequest = UnityWebRequestAssetBundle.GetAssetBundle("http://192.168.1.101:8000/HTTPRoot/model");
unityWebRequest.SendWebRequest();
//在没加载结束前 进行逻辑处理
while (!unityWebRequest.isDone)
{
print(unityWebRequest.downloadProgress);
print(unityWebRequest.downloadedBytes);
yield return null;
}
//yield return unityWebRequest.SendWebRequest();
print(unityWebRequest.downloadProgress);
print(unityWebRequest.downloadedBytes);
if (unityWebRequest.result == UnityWebRequest.Result.Success)
{
//可以把UnityWebRequest的downloadHandler属性as成DownloadHandlerAssetBundleAB包下载类得到其中的AB包
//AssetBundle assetBundle = (unityWebRequest.downloadHandler as DownloadHandlerAssetBundle).assetBundle;
//也可以用DownloadHandlerAssetBundleAB包下载类的GetContent方法传入UnityWebRequest对象得到AB包 这两种方法都可以
AssetBundle assetBundle = DownloadHandlerAssetBundle.GetContent(unityWebRequest);
print(assetBundle.name);
}
else
print("获取失败" + unityWebRequest.error + unityWebRequest.result + unityWebRequest.responseCode);
}
//获取AB包
StartCoroutine(LoadAssetBundle());
测试结果
总结
- UnityWebRequest 使用上和 WWW 类很类似。
- 需要注意:
- 获取文本或二进制数据时使用 UnityWebRequest.Get。
- 获取纹理图片数据时使用 UnityWebRequestTexture.GetTexture 以及 DownloadHandlerTexture.GetContent。
- 获取 AB 包数据时使用 UnityWebRequestAssetBundle.GetAssetBundle 以及 DownloadHandlerAssetBundle.GetContent。
54.2 知识点代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
public class Lesson54_网络通信_Unity网络类_UnityWebRequest类_常用获取数据 : MonoBehaviour
{
public RawImage rawImage;
void Start()
{
#region 知识点一 UnityWebRequest是什么?
//UnityWebRequest是一个Unity提供的一个模块化的系统类
//用于构成HTTP请求和处理HTTP响应
//它主要目标是让Unity游戏和Web服务端进行交互
//它将之前WWW的相关功能都集成在了其中
//所以新版本中都建议使用UnityWebRequest类来代替WWW类
//它在使用上和WWW很类似
//主要的区别就是UnityWebRequest把下载下来的数据处理单独提取出来了
//我们可以根据自己的需求选择对应的数据处理对象来获取数据
//注意:
//1.UnityWebRequest和WWW一样,需要配合协同程序使用
//2.UnityWebRequest和WWW一样,支持http、ftp、file协议下载或加载资源
//3.UnityWebRequest能够上传文件到HTTP资源服务器
#endregion
#region 知识点二 UnityWebRequest类的常用操作
//1.使用Get请求获取文本或二进制数据
//2.使用Get请求获取纹理数据
//3.使用Get请求获取AB包数据
//4.使用Post请求发送数据
//5.使用Put请求上传数据
#endregion
#region 知识点三 Get获取操作
//获取文本或2进制
StartCoroutine(LoadText());
//获取纹理
StartCoroutine(LoadTexture());
//获取AB包
StartCoroutine(LoadAssetBundle());
#endregion
#region 总结
//UnityWebRequest使用上和WWW类很类似
//我们需要注意的是
//1.获取文本或二进制数据时
// 使用UnityWebRequest.Get
//2.获取纹理图片数据时
// 使用UnityWebRequestTexture.GetTexture
// 以及DownloadHandlerTexture.GetContent
//3.获取AB包数据时
// 使用UnityWebRequestAssetBundle.GetAssetBundle
// 以及DownloadHandlerAssetBundle.GetContent
#endregion
}
#region 知识点三 Get获取操作
IEnumerator LoadText()
{
UnityWebRequest unityWebRequest = UnityWebRequest.Get("http://192.168.1.101:8000/HTTPRoot/test.txt");
//会等待服务器端响应后 断开连接后 再继续执行后面的内容
yield return unityWebRequest.SendWebRequest();
//如果处理成功 结果就是成功枚举
if (unityWebRequest.result == UnityWebRequest.Result.Success)
{
//UnityWebRequest的downloadHandler属性是下载处理器 负责管理由UnityWebRequest从远程服务器接收的主体数据。
//文本字符串
print(unityWebRequest.downloadHandler.text);
//字节数组
byte[] bytes = unityWebRequest.downloadHandler.data;
print("字节数组长度" + bytes.Length);
}
else
{
print("获取失败:" + unityWebRequest.result + unityWebRequest.error + unityWebRequest.responseCode);
}
}
IEnumerator LoadTexture()
{
//UnityWebRequest unityWebRequest = UnityWebRequestTexture.GetTexture("http://192.168.1.101:8000/HTTPRoot/pic.png");
//UnityWebRequest unityWebRequest = UnityWebRequestTexture.GetTexture("ftp://127.0.0.1/pic.png");
UnityWebRequest unityWebRequest = UnityWebRequestTexture.GetTexture("file://" + Application.streamingAssetsPath + "/test.png");
yield return unityWebRequest.SendWebRequest();
if (unityWebRequest.result == UnityWebRequest.Result.Success)
{
//可以把UnityWebRequest的downloadHandler属性as成DownloadHandlerTexture纹理下载类得到其中的纹理
//rawImage.texture = (unityWebRequest.downloadHandler as DownloadHandlerTexture).texture;
//也可以用DownloadHandlerTexture纹理下载类的GetContent方法传入UnityWebRequest对象得到纹理 这两种方法都可以
rawImage.texture = DownloadHandlerTexture.GetContent(unityWebRequest);
}
else
print("获取失败" + unityWebRequest.error + unityWebRequest.result + unityWebRequest.responseCode);
}
IEnumerator LoadAssetBundle()
{
UnityWebRequest unityWebRequest = UnityWebRequestAssetBundle.GetAssetBundle("http://192.168.1.101:8000/HTTPRoot/model");
unityWebRequest.SendWebRequest();
//在没加载结束前 进行逻辑处理
while (!unityWebRequest.isDone)
{
print(unityWebRequest.downloadProgress);
print(unityWebRequest.downloadedBytes);
yield return null;
}
//yield return unityWebRequest.SendWebRequest();
print(unityWebRequest.downloadProgress);
print(unityWebRequest.downloadedBytes);
if (unityWebRequest.result == UnityWebRequest.Result.Success)
{
//可以把UnityWebRequest的downloadHandler属性as成DownloadHandlerAssetBundleAB包下载类得到其中的AB包
//AssetBundle assetBundle = (unityWebRequest.downloadHandler as DownloadHandlerAssetBundle).assetBundle;
//也可以用DownloadHandlerAssetBundleAB包下载类的GetContent方法传入UnityWebRequest对象得到AB包 这两种方法都可以
AssetBundle assetBundle = DownloadHandlerAssetBundle.GetContent(unityWebRequest);
print(assetBundle.name);
}
else
print("获取失败" + unityWebRequest.error + unityWebRequest.result + unityWebRequest.responseCode);
}
#endregion
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com