UnityWebRequest简单介绍

本文详细介绍了UnityWebRequest在Unity中用于从服务器检索文本、二进制数据、纹理、AssetBundle,以及发送表单数据和上传原始数据的方法,包括不同下载和上传处理程序的使用和配置。
摘要由CSDN通过智能技术生成
一、从服务器检索简单数据(例:文本、二进制数据)(Get

语法:

UnityWebRequest myWr=UnityWebRequest.Get(“”);

详细信息:

1.此函数将创建 UnityWebRequest 并将目标 URL 设置为字符串参数。此函数不会设置任何其他自定义标志或标头。

2.默认情况下,此函数将标准 DownloadHandlerBuffer 附加到 UnityWebRequest。此处理程序可缓冲从服务器接收的数据,并在请求完成时将数据提供给脚本。

3.默认情况下,此函数不会将任何 UploadHandler 附加到 UnityWebRequest。如果需要,可以手动附加。

二、从服务器检索纹理Get

语法:

UnityWebRequest myWr=UnityWebRequestTexture.GetTexture(“”);

详细信息:

1.此函数将创建 UnityWebRequest 并将目标 URL 设置为字符串参数。此函数不会设置任何其他标志或自定义标头。

2.此函数将 DownloadHandlerTexture 对象附加到 UnityWebRequest。DownloadHandlerTexture 是一个进行了优化的专用下载处理程序,用于存储要在 Unity 引擎中用作纹理的图像。与下载原始字节并在脚本中手动创建纹理相比,使用此类可显著减少内存重新分配。

3.默认情况下,此函数不会附加上传处理程序。如果需要,可以手动添加。

三、从服务器检索AssetBundleGet

语法:

UnityWebRequest myWr=UnityWebRequestAssetBundle.GetAssetBundle(“”);

此函数的参数有多种形式。最简单的形式仅采用一个参数:下载 AssetBundle 时应使用的 URL。您可以选择提供校验和来验证下载数据的完整性。

或者,如果希望使用 AssetBundle 缓存系统,可提供版本号或 Hash128 数据结构。这些值与通过 WWW.LoadFromCacheOrDownload 为旧系统提供的版本号或 Hash128 objects 相同。

详细信息:

1.此函数将创建 UnityWebRequest 并将目标 URL 设置为提供的 URL 参数。此函数还会将 HTTP 动词设置为 GET,但不会设置任何其他标志或自定义标头。

2.此函数将 DownloadHandlerAssetBundle 附加到 UnityWebRequest。此下载处理程序有一个特殊的 assetBundle 属性,一旦下载和解码了足够的数据,便可使用该属性来提取 AssetBundle,从而允许访问 AssetBundle 中的资源。

3.如果提供版本号或 Hash128 对象作为参数,也会将这些参数传递给 DownloadHandlerAssetBundle。下载处理程序随后将采用缓存系统。

四、将表单发送到服务器POST

语法:

主要有两个函数使用IMultipartFormSection和WWWForm

IMultipartFormSection:

UnityWebRequest myWr=UnityWebRequest.Post(“”, List<IMultipartFormSection> formSections);

为了在更大程度上控制表单数据的指定方式,UnityWebRequest 系统包含了一个可由用户实现的 IMultipartFormSection 接口。对于标准应用程序,Unity 还提供了数据和文件部分的默认实现:MultipartFormDataSection 和 MultipartFormFileSection。

WWWForm:

UnityWebRequest myWr=UnityWebRequest.Post(“”, WWWForm formData);

为了帮助从 WWW 系统进行迁移,UnityWebRequest 系统允许使用旧的 WWWForm 对象来提供表单数据。

详细信息:

IMultipartFormSection:

1.此函数将创建 UnityWebRequest 并将目标 URL 设置为第一个字符串参数。此函数还会为 IMultipartFormSection 对象列表中所指定的表单数据相应设置 UnityWebRequest 的 Content-Type 标头。

2.默认情况下,此函数将 DownloadHandlerBuffer 附加到 UnityWebRequest。这是为了方便起见,可用于检查服务器的应答。

3.类似于 WWWForm POST 函数,此 HLAPI 函数依次调用每个提供的 IMultipartFormSection,然后将它们的格式设置为标准多部分表单(符合 RFC 2616 中的规定)。

4.已预先设置格式的表单数据存储在标准 UploadHandlerRaw 对象中,此对象随后附加到 UnityWebRequest。因此,在 UnityWebRequest.POST 调用之后对 IMultipartFormSection 对象执行的更改不会反映在发送到服务器的数据中。

WWWForm:

1.此函数创建新的 UnityWebRequest 并将目标 URL 设置为第一个字符串参数的值。此函数还读取由 WWWForm 参数生成的所有自定义标头(比如 Content-Type),然后将这些标头复制到 UnityWebRequest 中。

2.默认情况下,此函数将 DownloadHandlerBuffer 附加到 UnityWebRequest。这是为了方便起见,可用于检查服务器的应答。

3.此函数读取由 WWWForm object 生成的原始数据,然后将其缓冲在 UploadHandlerRaw 对象中,此对象附加到 UnityWebRequest。因此,调用 UnityWebRequest.POST 之后对 WWWForm 对象进行的更改不会改变 UnityWebRequest 的内容。

五、将原始数据上传到服务器PUT

语法:

UnityWebRequest myWr=UnityWebRequest.Put("", myData);

此函数采用两个参数。第一个参数是一个字符串,用于指定请求的目标 URL。第二个参数是字符串或字节数组,用于指定要发送到服务器的有效负载数据。

详细信息:

1.此函数创建 UnityWebRequest 并将内容类型设置为 application/octet-stream。

2.此函数将标准 DownloadHandlerBuffer 附加到 UnityWebRequest。与 POST 函数一样,此函数可用于从应用程序返回结果数据。

3.此函数将输入的上传数据存储在标准 UploadHandlerRaw 对象中,然后将此对象附加到 UnityWebRequest。因此,如果使用 byte[] 函数,则在 UnityWebRequest.PUT 调用之后对字节数组执行的更改不会反映在上传到服务器的数据中。

六、创建UnityWebRequest

语法:

详细信息:

1.标准的无参数构造函数将创建一个所有设置均为空或默认值的新 UnityWebRequest。此函数中不会设置目标 URL,不会设置自定义标头,并且重定向限制设置为 32。

2.第二个构造函数采用一个字符串参数。此构造函数将 UnityWebRequest 的目标 URL 分配给字符串参数的值,除此之外,与无参数的构造函数相同。

3.还可以设置多个其他属性,用于跟踪状态,以及检查 UnityWebRequest 的结果。

七、创建UploadHandler

语法:

详细信息:

1.目前,仅一种类型的上传处理程序可用:UploadHandlerRaw。此类在构建时接受数据缓冲区。此缓冲区在内部复制到本机代码内存中,然后当远程服务器准备好接受主体数据时,此缓冲区由 UnityWebRequest 系统使用。

2.上传处理程序还接受“Content Type”字符串。如果在 UnityWebRequest 自身中没有设置 Content-Type 标头,则此字符串用于 UnityWebRequest 的 Content-Type 标头值。如果在 UnityWebRequest 对象上手动设置了 Content-Type 标头,则将忽略上传处理程序对象上的 Content-Type。

3.如果没有在 UnityWebRequest 或 UploadHandler 上设置 Content-Type,则系统会将 Content-Type 默认设置为 application/octet-stream。

4.UnityWebRequest 具有一个 disposeUploadHandlerOnDispose 属性,其默认值为 true。如果此属性为 true,则在处理 UnityWebRequest 对象时还将在附加的上传处理程序上调用 Dispose(),致使下载处理程序无用。如果保持对上传处理程序的引用时间长度超过对 UnityWebRequest 的引用时间长度,应将 disposeUploadHandlerOnDispose 设置为 false。

八、创建DownloadHandler

类型:

DownloadHandlerBuffer 用于简单的数据存储。

DownloadHandlerFile 用于下载文件并将文件保存到磁盘(内存占用少)。

DownloadHandlerTexture 用于下载图像。

DownloadHandlerAssetBundle 用于提取 AssetBundle。

DownloadHandlerAudioClip 用于下载音频文件。

DownloadHandlerMovieTexture 用于下载视频文件。由于 MovieTexture 已被弃用,因此建议您使用 VideoPlayer 进行视频下载和电影播放。

DownloadHandlerScript 是一个特殊类。就其本身而言,不会执行任何操作。但是,此类可由用户定义的类继承。此类接收来自 UnityWebRequest 系统的回调,然后可以使用这些回调在数据从网络到达时执行完全自定义的数据处理。

这些 API 类似于 DownloadHandlerTexture 的接口。

UnityWebRequest 具有一个 disposeDownloadHandlerOnDispose 属性,其默认值为 true。如果此属性为 true,则在处理 UnityWebRequest 对象时还将在附加的下载处理程序上调用 Dispose(),致使下载处理程序无用。如果保持对下载处理程序的引用时间长度超过对 UnityWebRequest 的引用时间长度,应将 disposeDownloadHandlerOnDispose 设置为 false。

详细信息:

DownloadHandlerBuffer :

此下载处理程序是最简单的,可处理大多数用例。它将接收的数据存储在本机代码缓冲区中。下载完成后,可使用字节数组或文本字符串的形式访问缓冲的数据。

DownloadHandlerFile :

这是大型文件的特殊下载处理程序。它将下载的字节直接写入文件,因此无论下载的文件大小如何,内存使用量都很低。与其他下载处理程序的区别在于,无法从此下载处理程序获取数据,所有数据都将保存到文件中。

DownloadHandlerTexture :

相较于使用 DownloadHandlerBuffer 下载图像文件,然后再使用 Texture.LoadImage 从原始字节创建纹理,使用 DownloadHandlerTexture 会更有效。

此下载处理程序将接收的数据存储在 UnityEngine.Texture中。在下载完成时,它将 JPEG 和 PNG 解码为有效的 UnityEngine.Texture objects。每个 DownloadHandlerTexture 对象只创建一个 UnityEngine.Texture 副本。这样会减少垃圾收集的性能问题。此处理程序在本机代码中执行缓冲、解压缩和纹理创建。另外,解压缩和纹理创建任务在工作程序线程上而不是主线程上执行,这样可以在加载大型纹理时改善帧时间。

最后,DownloadHandlerTexture 仅在最终创建纹理本身时分配托管内存,因此消除了与脚本中执行字节到纹理转换相关的垃圾收集开销。

DownloadHandlerAssetBundle :

这种专门的下载处理程序的优势在于能够将数据流式传输到 Unity 的 AssetBundle 系统。一旦 AssetBundle 系统收到足够的数据,AssetBundle 就可以作为 UnityEngine.AssetBundle 对象使用。仅会创建 UnityEngine.AssetBundle 对象的一个副本。因此大大减少了运行时内存分配以及加载 AssetBundle 带来的内存影响。此下载处理程序还允许在未完全下载的情况下部分使用 AssetBundle,因此可以流式传输资源。

所有下载和解压缩都在工作线程上进行。

AssetBundle 通过 DownloadHandlerAssetBundle 对象进行下载,该对象具有特殊的 assetBundle 属性可用于检索 AssetBundle。

由于 AssetBundle 系统的工作方式,所有 AssetBundle 都必须具有关联的地址。通常,该地址是它们所在的名义 URL(表示任何重定向之前的 URL)。在几乎任何情况下,都应该传入与传递给 UnityWebRequest 相同的 URL。使用高级 API (HLAPI) 时,此操作将自动完成。

DownloadHandlerAudioClip:

此下载处理程序经过优化,用于下载音频文件。与使用 DownloadHandlerBuffer 来下载原始字节再从中创建 AudioClip 相比,此下载处理程序可以更方便地执行此操作。

DownloadHandlerScript :

对于需要完全控制下载数据处理的用户,Unity 提供了 DownloadHandlerScript 类。

默认情况下,此类的实例不执行任何操作。但是,如果您从 DownloadHandlerScript 派生自己的类,则可以重写某些函数并使用它们在数据从网络到达时接收回调。

注意:实际下载发生在工作线程上,但所有 DownloadHandlerScript 回调都在主线程上运行。应避免在这些回调期间执行计算量很大的操作。

  • 15
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UnityWebRequestUnity中用于HTTP通信的类。它可以用于从Web服务器下载数据,也可以用于向Web服务器上传数据。UnityWebRequest 支持多种不同的数据类型,包括文本、图像、音频和视频等。它还支持各种不同的Web协议,包括HTTP、HTTPS和FTP等。 使用 UnityWebRequest,可以通过以下步骤进行HTTP通信: 1. 创建一个 UnityWebRequest 对象。 2. 设置 UnityWebRequest 对象的属性,例如URL、HTTP请求方法(GET、POST等)、Headers、上传数据等。 3. 发送 HTTP 请求。 4. 在接收到响应后,处理响应数据。可以根据需要将响应数据转换为文本、图像、音频或视频等。 以下是一个简单的示例,演示如何使用 UnityWebRequest 下载一个文本文件: ``` IEnumerator DownloadTextFile(string url) { UnityWebRequest www = UnityWebRequest.Get(url); yield return www.SendWebRequest(); if (www.result == UnityWebRequest.Result.Success) { string text = www.downloadHandler.text; Debug.Log("Downloaded text: " + text); } else { Debug.Log("Error downloading: " + www.error); } } ``` 在上面的示例中,我们首先创建了一个 UnityWebRequest 对象,并设置它的 URL。然后,我们使用 `yield return www.SendWebRequest()` 发送 HTTP 请求,并等待响应。在接收到响应后,我们检查 UnityWebRequest 的 `result` 属性,如果请求成功,我们获取响应数据并输出到控制台中。如果请求失败,我们输出错误信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值