📜  unityWebRequest 获取返回数据 - C# (1)

📅  最后修改于: 2023-12-03 15:20:53.872000             🧑  作者: Mango

UnityWebRequest 获取返回数据 - C#

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 请求

要发送一个 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 能够方便地实现网络请求,并且支持各种请求方式和返回数据处理方式。要注意使用好异步和协程,以避免阻塞主线程。