📅  最后修改于: 2023-12-03 15:20:53.872000             🧑  作者: Mango
UnityWebRequest 是 Unity 提供的网络请求库,它可以支持各种 HTTP 请求方式,并能获取返回数据。在很多场景下,我们需要从服务器获取数据,UnityWebRequest 可以帮我们轻松实现这一目标。
要发送一个简单的 GET 请求,我们可以使用 UnityWebRequest.Get() 方法:
IEnumerator GetRequest(string uri)
{
using (UnityWebRequest request = UnityWebRequest.Get(uri))
{
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
string responseText = request.downloadHandler.text;
// 处理返回数据
}
else
{
Debug.LogError($"Request failed: {request.responseCode} {request.error}");
}
}
}
UnityWebRequest 是一个 IDisposable 对象,我们在使用它之后要及时调用 Dispose 方法将其释放。使用 using 语句可以简化这一过程。
SendWebRequest() 方法是异步的,需要使用协程(Coroutine)来使用。请求完成之后,我们可以检查 result 字段来判断是否请求成功。如果成功,我们可以从 downloadHandler.text 字段中获取文本形式的返回数据。
要发送一个 POST 请求并提交表单数据,我们可以使用 UnityWebRequest.Post() 方法:
IEnumerator PostRequest(string uri, WWWForm form)
{
using (UnityWebRequest request = UnityWebRequest.Post(uri, form))
{
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
string responseText = request.downloadHandler.text;
// 处理返回数据
}
else
{
Debug.LogError($"Request failed: {request.responseCode} {request.error}");
}
}
}
在这个例子中,我们需要使用 WWWForm 类创建表单数据。UnityWebRequest.Post() 方法会自动设置请求头中的 Content-Type,因此我们无需手动设置。
在前面的示例中,我们可以使用 downloadHandler.text 字段获取返回数据,但 UnityWebRequest 还有其他的返回数据处理方式。
如果返回的是 byte 数组,我们可以使用 downloadHandler.data 字段:
byte[] responseData = request.downloadHandler.data;
如果返回的是 Texture2D 数据,我们可以使用 downloadHandler.texture 字段:
Texture2D responseTexture = request.downloadHandler.texture;
UnityWebRequest 能够方便地实现网络请求,并且支持各种请求方式和返回数据处理方式。要注意使用好异步和协程,以避免阻塞主线程。