Unity UnityWebRequest

本文介绍了一个使用Unity进行HTTP GET和POST请求的例子。通过具体的代码实现展示了如何与服务器交互,包括发送请求、处理响应及异常情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/****************************************************************************
 * 2021.3 DESKTOP-J98GMVJ
 ****************************************************************************/

using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using QFramework;
using System.Collections;
using UnityEngine.Networking;

namespace QFramework.Example
{
    public partial class LoginCamRaw : UIComponent
    {

        private void Awake()
        {
        }

        public string m_sServerAddress => "http://127.0.0.1/";
        public string m_sPostMsg => "https://www.shengyinyouju.cn/cBBQE6uuDk4g=";
        void Start()
        {
            //StartCoroutine(Get());
            //StartCoroutine(Post(m_sPostMsg));
        }

        IEnumerator Get()
        {
            UnityWebRequest webRequest = UnityWebRequest.Get(m_sServerAddress);

            yield return webRequest.SendWebRequest();
            //异常处理,很多博文用了error!=null这是错误的,请看下文其他属性部分
            if (webRequest.isHttpError || webRequest.isNetworkError)
                Debug.Log(webRequest.error);
            else
            {
                Debug.Log(webRequest.downloadHandler.text);
            }

        }

        // 外部调用 post 到服务器方法
        public void PostToServer(string m_sPostMsg)
        {
            StartCoroutine(Post(m_sPostMsg));
        }

        IEnumerator Post(string m_sPostMsg)
        {
            WWWForm form = new WWWForm();
            //键值对
            form.AddField("url", m_sPostMsg);

            UnityWebRequest webRequest = UnityWebRequest.Post(m_sServerAddress, form);

            yield return webRequest.SendWebRequest();
            //异常处理,很多博文用了error!=null这是错误的,请看下文其他属性部分
            if (webRequest.isHttpError || webRequest.isNetworkError)
                Debug.Log(webRequest.error);
            else
            {
                Debug.Log(webRequest.downloadHandler.text);
            }
        }

        protected override void OnBeforeDestroy()
        {
        }
    }
}

 

### Unity 中使用 `UnityWebRequest` 进行网络请求 #### 创建并发送 GET 请求 为了发起一个简单的 HTTP GET 请求,可以创建一个新的 `UnityWebRequest` 对象,并指定目标 URL 和请求方式。下面是一个基本的例子: ```csharp using UnityEngine; using UnityEngine.Networking; public class WebRequestExample : MonoBehaviour { void Start() { string uri = "http://www.myserver.com/foo.txt"; UnityWebRequest myWr = UnityWebRequest.Get(uri); // 发起GET请求[^1] StartCoroutine(SendRequest(myWr)); } IEnumerator SendRequest(UnityWebRequest request) { yield return request.SendWebRequest(); if (request.result != UnityWebRequest.Result.Success) { Debug.LogError($"Error: {request.error}"); // 错误处理 } else { Debug.Log(request.downloadHandler.text); // 输出响应内容 } } } ``` 这段代码展示了如何构建一个 `UnityWebRequest` 实例来执行 GET 请求,并通过协程等待其完成。 #### 终止正在进行中的请求 如果希望中途取消某个正在运行的 `UnityWebRequest`,可以通过调用 `Abort()` 方法实现这一点。这将立即终止连接尝试或已建立的数据传输过程。一旦被中断,该对象会被标记为遇到系统级别的错误状态[^2]。 ```csharp if (someConditionToCancel) { myWr.Abort(); // 取消当前请求 } ``` 当请求被成功中止后,检查 `isNetworkError` 或者 `isHttpError` 属性将会得到 true 的结果,而 `error` 字段则会显示 `"User Aborted"` 文本。 #### 常见构造函数和其他特性简介 除了上述提到的功能外,`UnityWebRequest` 类还提供了多种其他特性和构造选项供开发者利用。例如,可以根据具体需求自定义头部信息、设置超时时间等参数[^3]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值