简述一下Unity的UnityWebRequest

Unity之UnityWebRequest和使用 官方描述:UnityWebRequest 提供了一个模块化系统,用于构成 HTTP 请求和处理 HTTP 响应。UnityWebRequest 系统的主要目标是让 Unity 游戏与 Web 浏览器后端进行交互。该系统还支持高需求功能,例如分块 HTTP 请求、流式 POST/PUT 操作以及对 HTTP 标头和动词的完全控制。 阅读详情
AI摘要

本文介绍了Unity引擎中的网络请求工具UnityWebRequest。它比旧版WWW类更灵活高效,支持多种HTTP方法。文中阐述了HTTP请求与响应原理,详解了UnityWebRequest的作用、API,给出发送GET、POST请求及下载文件的示例,还提及使用时的注意事项。

UnityWebRequest是Unity引擎中用于处理网络请求的强大工具,尤其适用于与Web服务器进行交互,比如获取数据、上传文件或下载资源等。相较于旧版的WWW类,UnityWebRequest提供了更灵活、更高效的API,支持多种HTTP方法,并能处理复杂的网络操作。本文将以简单易懂的方式详细介绍UnityWebRequest的作用、基本用法、API详解以及使用注意事项,帮助你快速掌握这一重要工具。


引言

在现代游戏开发中,与服务器的交互是不可或缺的一部分。无论是获取游戏配置、上传玩家数据,还是下载资源包,网络请求都扮演着关键角色。UnityWebRequest作为Unity官方推荐的网络请求工具,提供了强大的功能来处理这些任务。相较于旧版的WWW类,UnityWebRequest不仅性能更优,还支持更多HTTP方法和自定义操作,适用于各种复杂的网络场景。

本文将从基础概念入手,逐步深入,带你全面了解UnityWebRequest的用法和优势。


基本概念

HTTP请求与响应

在介绍UnityWebRequest之前,简单了解HTTP(超文本传输协议)的工作原理是必要的。HTTP是Web上最常用的协议之一,用于客户端(如游戏)与服务器之间的通信。HTTP请求通常包括以下部分:

  • 方法:如GET(获取数据)、POST(提交数据)、PUT(更新数据)、DELETE(删除数据)等。
  • URL:请求的目标地址。
  • 请求头:包含元数据,如内容类型、认证信息等。
  • 请求体:POST或PUT请求中附带的数据。

服务器在接收到请求后,会返回一个HTTP响应,包含:

  • 状态码:如200(成功)、404(未找到)、500(服务器错误)等。
  • 响应头:包含元数据。
  • 响应体:服务器返回的数据。

UnityWebRequest的作用

UnityWebRequest是Unity封装的一个类,用于在Unity中发送HTTP请求并处理响应。它支持:

  • 多种HTTP方法:GET、POST、PUT、DELETE等。
  • 上传和下载文件。
  • 自定义请求头和请求体。
  • 处理重定向、认证和SSL证书。

相较于旧版的WWW类,UnityWebRequest提供了更细粒度的控制,支持异步操作,且在性能上有所提升。


API详解

UnityWebRequest提供了丰富的API,下面将介绍其主要类和方法。

主要类

  • UnityWebRequest:核心类,用于创建和管理网络请求。
  • DownloadHandler:用于处理下载的数据,例如:
    • DownloadHandlerBuffer:将数据下载到内存。
    • DownloadHandlerFile:将数据下载到文件。
  • UploadHandler:用于处理上传的数据,例如:
    • UploadHandlerRaw:上传原始字节数据。

常用方法

  • UnityWebRequest.Get(string url):创建一个GET请求。
  • UnityWebRequest.Post(string url, string postData):创建一个POST请求,支持字符串或WWWForm数据。
  • UnityWebRequest.Put(string url, byte[] bodyData):创建一个PUT请求。
  • UnityWebRequest.Delete(string url):创建一个DELETE请求。
  • UnityWebRequest.SendWebRequest():发送请求并返回一个UnityWebRequestAsyncOperation对象,用于异步操作。

属性

  • isDone:请求是否完成。
  • responseCode:HTTP响应状态码。
  • downloadHandler:用于获取下载的数据。
  • uploadHandler:用于设置上传的数据。
  • timeout:设置请求的超时时间(单位:秒)。

使用示例

下面通过几个实际代码示例,展示UnityWebRequest的常见用法。

示例1:发送GET请求

以下是一个简单的GET请求示例,用于从服务器获取文本数据。

using UnityEngine;
using UnityEngine.Networking;
using System.Collections;

public class GetRequestExample : MonoBehaviour
{
    void Start()
    {
        StartCoroutine(GetText());
    }

    IEnumerator GetText()
    {
        using (UnityWebRequest www = UnityWebRequest.Get("https://example.com/data"))
        {
            yield return www.SendWebRequest();

            if (www.result == UnityWebRequest.Result.Success)
            {
                Debug.Log("获取数据成功: " + www.downloadHandler.text);
            }
            else
            {
                Debug.LogError("请求失败: " + www.error);
            }
        }
    }
}

说明:

  • 使用UnityWebRequest.Get创建一个GET请求。
  • 通过SendWebRequest发送请求,并使用yield return等待请求完成。
  • 检查result属性判断请求是否成功,成功则输出下载的文本数据。

示例2:发送POST请求

以下是一个POST请求示例,用于向服务器提交表单数据。

using UnityEngine;
using UnityEngine.Networking;
using System.Collections;

public class PostRequestExample : MonoBehaviour
{
    void Start()
    {
        StartCoroutine(PostData());
    }

    IEnumerator PostData()
    {
        WWWForm form = new WWWForm();
        form.AddField("username", "player1");
        form.AddField("score", 100);

        using (UnityWebRequest www = UnityWebRequest.Post("https://example.com/submit", form))
        {
            yield return www.SendWebRequest();

            if (www.result == UnityWebRequest.Result.Success)
            {
                Debug.Log("提交成功: " + www.downloadHandler.text);
            }
            else
            {
                Debug.LogError("提交失败: " + www.error);
            }
        }
    }
}

说明:

  • 使用WWWForm类创建表单数据。
  • 使用UnityWebRequest.Post发送POST请求。
  • 其余步骤与GET请求类似。

示例3:下载文件

UnityWebRequest还支持下载文件到本地,以下是一个下载图片的示例。

using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
using System.IO;

public class DownloadFileExample : MonoBehaviour
{
    void Start()
    {
        StartCoroutine(DownloadImage());
    }

    IEnumerator DownloadImage()
    {
        string url = "https://example.com/image.png";
        string savePath = Path.Combine(Application.persistentDataPath, "image.png");

        using (UnityWebRequest www = UnityWebRequest.Get(url))
        {
            www.downloadHandler = new DownloadHandlerFile(savePath);
            yield return www.SendWebRequest();

            if (www.result == UnityWebRequest.Result.Success)
            {
                Debug.Log("图片下载成功,保存到: " + savePath);
            }
            else
            {
                Debug.LogError("下载失败: " + www.error);
            }
        }
    }
}

说明:

  • 使用DownloadHandlerFile将下载的数据直接保存到文件。
  • 指定保存路径并发送请求。

注意事项

在使用UnityWebRequest时,有一些重要的事项需要注意:

  • 永远异步: 坚持在协程中使用 yield return webRequest.SendWebRequest() 和等待循环。
  • 必须 Dispose: 牢记使用 using 语句或在 finally 块中手动调用 webRequest.Dispose()。
  • 健壮的错误处理: 总是检查 webRequest.result 并处理各种错误情况。考虑网络不稳定、服务器错误、数据格式错误等。
  • 超时设置: 通过 webRequest.timeout (单位:秒) 设置合理的超时时间,防止请求无限期挂起。
  • HTTPS: 尽可能使用 HTTPS (即 https:// 开头的 URL) 来保证通信安全。
  • 大文件处理: 下载大文件时,考虑使用 DownloadHandlerFile 直接写入磁盘,避免内存暴涨。上传大文件时,UploadHandlerFile 也很有用。可以检查 webRequest.downloadProgress 或 webRequest.uploadProgress 来显示进度条。
  • 关注服务器负载: 不要在短时间内发送大量请求,尊重服务器的速率限制 (Rate Limiting)。
  • 平台差异: 虽然 UWR 跨平台性很好,但在特定平台(如 WebGL)可能会有一些细微的行为差异或限制,需要查阅文档或进行测试。

Unity UnityWebRequest使用方法 Unity UnityWebRequest使用方法简介结构详情一、和WWW的区别二、构造方法三、封装的构造方法四、使用举例Get()Post()读取过程中显示进度 简介 UnityWebRequest 提供了一个模块化系统,用于构成 HTTP 请求和处理 HTTP 响应。 结构 UploadHandler: 处理数据到服务器的传输 DownloadHandler: 处理从服务器接收的数据的接收、缓冲和后处理 UnityWebRequest: 对象管理其他两个对象 详情 一、和WWW的区别 WWW和Uni 阅读详情

相关推荐

unity中关于WWW过时后 怎么改成用UnityWebRequest的代码

在学习Unity的时候 ,视频学到文件读取时都是在用WWW的类 , 但是WWW过时了,现在都在使用UnityWebRequest,网上找了好多资料都是开协程用UnityWebRequest,跟学习视频上的代码套不上,自己试了了一下午才知道怎么回事, 分享给正在学习的朋友,以下是代码 原版代码 public static string GetConfigFile(string ...

HusbandZuo的博客 2825

Unity网络请求方式UnityWebRequest

在unity2019中,“WWW"的资源加载方式过时了,新的方法为"UnityWebRequest” 使用方法如下: 1.加载图片资源 using UnityEngine; using UnityEngine.Networking; using System.Collections; public class MyBehaviour : MonoBehaviour { void Start() { StartCoroutine(GetText()); } IEnumerator GetText() {

梦想是世界和平 1万+

Unity使用UnityWebRequest实现HTTP网络连接

Unity使用UnityWebRequest实现HTTP网络连接UnityWebRequest代码主要例项参考链接 UnityWebRequest Unity中UnityWebRequest和WWW都可以实现HTTP请求,但UnityWebRequest是Unity新的网络请求方式,新版本已经对WWWAPI弃用了。 UnityWebRequests处理与Web服务器的HTTP通信流。 需要注意的其他对象,特别是DownloadHandler和UploadHandler,分别管理下载和上传数据。 注意:一旦U

天富儿的博客 5576

UnityWebRequest简单介绍

一、从服务器检索简单数据(例:文本、二进制数据)(Get): 语法: UnityWebRequestmyWr=UnityWebRequest.Get(“”); 详细信息: 1.此函数将创建UnityWebRequest并将目标 URL 设置为字符串参数。此函数不会设置任何其他自定义标志或标头。 2.默认情况下,此函数将标准DownloadHandlerBuffer附加到UnityWebRequest。此处理程序可缓冲从服务器接收的数据,并在请求完成时将数据提供给脚本。

weixin_51481499的博客 2291

Unity UnityWebRequest下载文件 替代WWW

今天测试那边提了个问题,就是当网络极差的时候,游戏下载将会停止(即一直在等待yield return www)当时间较长时网络恢复将无法继续下载,也没有提示,需要重启才能重新下载。因为WWW不存在设置timeout属性,因此当我们网络不好请求超时的时候,无法简单的做出判断。后面查阅资料发现Unity早在5.4版本的时候就出了新的API UnityWebRequest用于替代WWW。这边就简单的记录...

王王王渣渣的博客 2万+

Unity UnityWebRequest实现与后端的交互

一般我们与后端对接的时候会用到UnityWebRequest 这里简单使用这个与后端进行交互 这个是总类 using UnityEngine; using System.Collections; using System.Collections.Generic; using System; using UnityEngine.Networking; public enum EOPERATIO...

qq_35037137的博客 2344

Unity UnityWebRequest常用操作

UnityWebRequest使用指南摘要 本文介绍了Unity中UnityWebRequest模块的使用方法,包括其架构、支持平台和常用操作。UnityWebRequest提供了模块化系统处理HTTP请求和响应,支持大多数Unity平台。文章重点讲解了三种常见GET请求操作:获取文本/二进制数据、下载纹理和获取AssetBundle。每种操作都详细说明了其实现方式、参数配置和注意事项,并提供了完整的代码示例。通过UnityWebRequest的高级API,开发者可以高效地完成网络交互任务,同时获得更好的内

心疼你的一切博客 2908

揭秘 Unity 引擎 UnityWebRequest 实现原理深度剖析(大白话生动版)

UnityWebRequest是Unity引擎进行网络通信的核心类,通过C#层与底层C++网络库协作实现。其工作流程包括创建请求、配置参数、异步发送及数据处理,利用DownloadHandler和UploadHandler分别处理下载和上传。设计上支持协程异步操作,跨平台适配不同系统API,并通过属性管理请求状态和错误。整体架构分为C#接口层和C++实现层,前者提供开发接口,后者负责实际网络通信,两者通过内部绑定高效协作,实现高性能跨平台网络功能。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 899

Unity UnityWebRequest高级操作

本文介绍了Unity中低级网络API(LLAPI)的使用方法,重点讲解了UnityWebRequest的创建、UploadHandler和DownloadHandler的应用。文章首先比较了高级API(HLAPI)和低级API的区别,指出LLAPI提供了更大的灵活性。在具体实现部分,详细说明了如何创建UnityWebRequest对象并设置相关属性,包括URL、请求方法、超时等参数。对于数据上传,介绍了UploadHandlerRaw的使用方式;在数据下载方面,则全面讲解了多种DownloadHandler

心疼你的一切博客 2654

Unity 实战项目 ☀️| 一篇文章 学会在Unity中访问 URL 连接网页 和 下载图片、文件

Unity,在Unity中使用URL连接Web网页,和下载图片文件等

努力前行,总会成为自己心中的那道光 8万+

Unity 3D脚本编程与游戏开发【4.4】

虽然游戏开发者并不会让⽤户下载恶意代码,但⽹络中的代码资源存在被恶意植⼊⽊⻢的可能性,如资源服务器被⾮法⼊侵、⽤户的⽹络被劫持等。如果采⽤这种设计,游戏的安装包只需要包含Unity引擎本⾝的资源、加载程序的资源和过渡场景的资源就⾜够了,从⽽安装包的容量可以做到⾮常⼩。但它也有着致命的缺点,在iOS平台上,出于安全性的考虑,不允许利⽤反射加载⽹络代码,因此这种做法在iOS等安全性要求较⾼的操作系统中⽆法使⽤。⽽且,如果⽤户的本地资源有⼀部分是新的,⼀部分是旧的,也需要某种机制保证快速、准确地更新旧的资源。

qq_43416206的博客 921

【Unity】UnityWebRequest学习——Unity中的HTTP网络通信

Unity中的HTTP网络通信

Sig的博客 1万+

拌合楼管理软件开发(十一) 海康威视车牌识别摄像头安装调试,总算是跑通了。

/保存的文件个数这里之所以需要用到委托,直接更新textbox文本中的内容,以及复制picturebox的image会提示不是从齐创建的线程调用。

morsth的博客 4814

Unity 使用UnityWebRequest问题小结

UnityWebRequest是自带的下载资源的api,优点显而易见:封装好,简单用,兼容性跨平台非常好。缺点也显而易见:可拓展性差 下载小文件通常使用下面的方法: public IEnumerator DownloadFile(string url, string contentName) { string downloadFileName = ""; #if UN...

www1501766557的博客 5408

aruco_ros实战:从USB摄像头到Marker位姿检测全流程解析

本文详细解析了使用aruco_ros从USB摄像头实现ArUco Marker检测与位姿估计的全流程。内容涵盖环境搭建、核心launch文件配置、可视化调试、位姿数据解析以及深度优化技巧,帮助开发者快速掌握ROS下的视觉定位关键技术,并集成到机器人项目中。

weixin_29230805的博客 265

Eplan2022 复制已有的宏文件生成新的原理图宏文件

Eplan2022 新建原理图宏文件

haier123888的博客 1万+

Unity UnityWebRequest.Post传参Json数据

学习笔记,仅用于参考,借鉴 添加链接描述 ** UnityWebRequest.Post ** Unity中的HTTP通信主要依赖的是Unity自带的UnityWebRequest类,之前的WWW类已被弃用 Post请求,向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 对应的调用方法:UnityWe...

梦丶初寒 1万+

解决rt-thread上使用SPI+DMA

首先阐述下遇到的问题 使用SPI读取icm20602数据,读取频率为1000hz,使用stm32f407主控,发现CPU占用率达到了70%,将此线程注释掉后CPU占用率掉到25%,看来这里要着重优化,便萌生了使用DMA的想法。 使用SPI+DMA要进行的配置 1.开启RTT设备驱动。点击自己的工程 ->RT-Thread Setting2.在board.hzhong3.在board.c文件里加入以下函数,此函数受设备框架调用 void HAL_SPI_MspInit(SPI_HandleTypeDef

响望的博客 8085

Unity UnityWebRequest加载数据

我是在安卓平台下使用此功能,windows平台可以直接使用StreamReader来读取 public string LoadGameData(string fileName) { if(!File.Exists(fileName)) //判断文件是否存在 return null; StreamReader streamReader = File.OpenTex...

fw_wyc的博客 3005

LabVIEW小白福音:手把手教你用NI采集卡搭建振动信号采集系统(附源码和避坑指南)

本文为LabVIEW初学者提供详细的NI采集卡振动信号采集系统搭建指南,涵盖硬件连接、驱动安装、信号处理及性能优化等关键步骤。特别针对振动信号采集系统中的常见问题提供解决方案,并附源码和避坑指南,帮助用户快速上手并避免常见错误。

weixin_30485379的博客 103

Cherry Studio部署MCP服务报错全记录:从零解决‘Connection closed‘问题

本文详细记录了在Cherry Studio中部署MCP服务时遇到‘Connection closed’报错的完整排查与解决过程。文章从环境依赖(UV、Bun)的安装验证、绝对路径配置、网络镜像源设置,到服务端手动调试与Cherry Studio配置检查,提供了一套系统性的解决方案,帮助开发者彻底解决此类连接问题。

g9h0i1的博客 763

Unity 基础 之 UnityWebRequest Post 的简单封装使用

Unity 基础 之 UnityWebRequest Post 的简单封装使用 一、简单介绍 Unity中的一些知识点整理。 本节简单介绍在Unity开发中的,使用 UnityWebRequest,进行 Post 请求,值得注意的是,根据不同的请求头,注意传入不同的数据格式就好,如果你有新的方式也可以留言,多谢。 具体可参见 Unity 官网 UnityWebRequest 介绍 Unity - Manual: UnityWebRequest 二、实现原理 1、Uni...

仙魁XAN 4570

多跳问答技术解析:从原理到金融领域实践

多跳问答(Multi-hop QA)是自然语言处理中的高级任务,要求系统通过多步推理整合分散信息来回答问题。其核心技术在于理解文档间的复杂关联,相比单跳问答需要更精细的数据集设计和模型架构。在金融、医疗等专业领域,多跳问答能有效处理如'腾讯大股东投资的港股上市公司'这类需要串联多个信息点的问题。典型实现方案包括MR-Search框架的三级检索器设计,分别处理实体召回、关系匹配和数值比较。当前最佳实践表明,结合稠密检索与稀疏检索的混合策略,配合动态路由机制,能在保持较高精度的同时控制计算成本。这类技术在金融风

weixin_42566072的博客 606

Unity用UnityWebRequest,从服务器 下载图片

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking; using UnityEngine.UI; public class DownLoadImageFromServer : MonoBehaviour { void Start() { //异步加载 StartCoroutine(Down

weixin_42935398的博客 4219

GRSL 2026 即插即用 | Transformer篇 | DCSA:动态稀疏门控自注意力,兼顾长距离依赖与局部细节表达!

SDANet整体架构和模块Dynamic Channel Sparse Attention (DCSA):DCSA为Transformer块中的自注意力层。DCSA架构:样本级动态稀疏注意力:首次实现每个样本独立预测注意力稀疏度:通过轻量门控网络根据输入特征的复杂度自适应调整保留的通道数,简单样本使用更高稀疏度(如保留 20% 通道),复杂样本使用更低稀疏度(如保留 80% 通道),在保证精度的前提下平均计算量降低 50% 以上。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 108

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【Unity】如何使用UnityWebRequest

UnityWebRequest是Unity提供的用于发送HTTP请求的类,它可以用于获取网络资源,也可以用于上传和下载数据。UnityWebRequest提供了一种模块化系统,用于构建HTTP请求和处理HTTP响应,其主要目标是为了让Unity游戏与Web浏览器后端进行交互。

weixin_56166431的博客 1761

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

上一篇: 简单了解一下Unity的Resources.UnloadUnusedAssets
下一篇: Unity存储小能手:PlayerPrefs指南
枫景Maple
博客等级 码龄2年 485粉丝 100原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值