☰
【Unity开发】UnityWebRequest 完全指南
2026/10/16 5:40:35 网站建设 项目流程


🐾 个人主页 🐾
阿松爱睡觉,横竖醒不来
🏅你可以不屠龙,但不能不磨剑🗡

文章目录

  • 一、前言
  • 二、最简单的GET请求
  • 三、下载图片并显示
  • 四、POST请求(发送数据给服务器)
  • 五、显示下载进度
  • 六、错误处理
  • 七、常用下载类型
  • 八、完整示例:图片下载器
  • 九、注意事项

一、前言

网络占据我们生活中的绝大部分!Unity中也有一个非常重要的网络请求工具——UnityWebRequest,那么这篇文章就是说一下的UnityWebRequest的使用,让项目更上一个台阶。

首先说一下什么是UnityWebRequest?它是Unity提供的一个现代化网络请求系统,就像你的手机浏览器一样,只不过是在游戏里工作!它大致可以实现下面的几种类型的功能:

  1. 从网上下载东西(图片、音频、视频等)
  2. 向服务器发送数据
  3. 上传文件
  4. 处理网页请求

二、最简单的GET请求

以练促学,先看一个最简单的例子——从网上下载文字

usingUnityEngine;usingUnityEngine.Networking;usingSystem.Collections;publicclassSimpleWebRequest:MonoBehaviour{voidStart(){StartCoroutine(GetText());}IEnumeratorGetText(){// 1. 创建一个请求UnityWebRequestrequest=UnityWebRequest.Get("https://example.com");// 2. 发送请求并等待完成yieldreturnrequest.SendWebRequest();// 3. 检查结果if(request.result==UnityWebRequest.Result.Success){Debug.Log("下载成功:"+request.downloadHandler.text);}else{Debug.Log("下载失败:"+request.error);}}}

代码解析:

  1. UnityWebRequest.Get(url)- 创建一个GET请求
  2. yield return request.SendWebRequest()- 发送请求并等待完成
  3. request.downloadHandler.text- 获取下载的文字内容

三、下载图片并显示

现在我们来下载一张图片并显示在UI上:

IEnumeratorDownloadImage(){// 1. 创建图片请求UnityWebRequestrequest=UnityWebRequestTexture.GetTexture("https://example.com/image.jpg");// 2. 发送请求yieldreturnrequest.SendWebRequest();// 3. 处理结果if(request.result==UnityWebRequest.Result.Success){// 获取下载的纹理Texture2Dtexture=DownloadHandlerTexture.GetContent(request);// 创建Sprite并显示在UI上Spritesprite=Sprite.Create(texture,newRect(0,0,texture.width,texture.height),newVector2(0.5f,0.5f));GetComponent<Image>().sprite=sprite;}else{Debug.LogError("图片下载失败:"+request.error);}}

四、POST请求(发送数据给服务器)

有时候我们需要向服务器发送数据,比如登录信息:

IEnumeratorLogin(stringusername,stringpassword){// 1. 创建表单数据WWWFormform=newWWWForm();form.AddField("username",username);form.AddField("password",password);// 2. 创建POST请求UnityWebRequestrequest=UnityWebRequest.Post("https://example.com/login",form);// 3. 发送请求yieldreturnrequest.SendWebRequest();// 4. 处理响应if(request.result==UnityWebRequest.Result.Success){Debug.Log("登录成功:"+request.downloadHandler.text);}else{Debug.LogError("登录失败:"+request.error);}}

五、显示下载进度

让我们给下载添加一个进度条:

publicSliderprogressBar;publicTextprogressText;IEnumeratorDownloadWithProgress(){UnityWebRequestrequest=UnityWebRequest.Get("https://example.com/bigfile.zip");// 开始下载varoperation=request.SendWebRequest();// 更新进度条while(!operation.isDone){progressBar.value=request.downloadProgress;progressText.text=(request.downloadProgress*100).ToString("F0")+"%";yieldreturnnull;}if(request.result==UnityWebRequest.Result.Success){Debug.Log("下载完成!");}}

六、错误处理

网络请求可能会失败,我们需要正确处理各种错误:

if(request.result==UnityWebRequest.Result.Success){// 成功处理}elseif(request.result==UnityWebRequest.Result.ConnectionError){Debug.LogError("网络连接错误:"+request.error);}elseif(request.result==UnityWebRequest.Result.ProtocolError){Debug.LogError("服务器返回错误:"+request.responseCode);}elseif(request.result==UnityWebRequest.Result.DataProcessingError){Debug.LogError("数据处理错误:"+request.error);}

七、常用下载类型

UnityWebRequest支持下载各种类型的内容:

类型创建方法获取内容方法
文本UnityWebRequest.Get(url)request.downloadHandler.text
图片UnityWebRequestTexture.GetTexture(url)DownloadHandlerTexture.GetContent(request)
音频UnityWebRequestMultimedia.GetAudioClip(url, AudioType.MPEG)DownloadHandlerAudioClip.GetContent(request)
AssetBundleUnityWebRequestAssetBundle.GetAssetBundle(url)DownloadHandlerAssetBundle.GetContent(request)

八、完整示例:图片下载器

usingUnityEngine;usingUnityEngine.UI;usingUnityEngine.Networking;usingSystem.Collections;publicclassImageDownloader:MonoBehaviour{publicInputFieldurlInput;publicImagedisplayImage;publicSliderprogressBar;publicTextstatusText;publicvoidStartDownload(){StartCoroutine(DownloadImage(urlInput.text));}IEnumeratorDownloadImage(stringurl){statusText.text="准备下载...";progressBar.value=0;using(UnityWebRequestrequest=UnityWebRequestTexture.GetTexture(url)){// 开始下载varoperation=request.SendWebRequest();statusText.text="下载中...";// 更新进度while(!operation.isDone){progressBar.value=request.downloadProgress;yieldreturnnull;}// 处理结果if(request.result==UnityWebRequest.Result.Success){Texture2Dtexture=DownloadHandlerTexture.GetContent(request);Spritesprite=Sprite.Create(texture,newRect(0,0,texture.width,texture.height),Vector2.one*0.5f);displayImage.sprite=sprite;statusText.text="下载完成!";}else{statusText.text="下载失败:"+request.error;}}}}

九、注意事项

  1. 一定要用协程:网络请求必须放在IEnumerator中,使用yield return等待完成
  2. 用完要清理:使用using语句或手动调用request.Dispose()
  3. Android权限:在Android上需要添加网络权限(在Player Settings中)
  4. WebGL限制:WebGL有特殊限制,需要使用特定方式处理
  5. 检查请求状态: 请求后要检查请求是否成功,如果请求都没有成功,那么后续的操作也毫无意义
  6. 错误处理: 添加对应的错误处理

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询