Unity3D网络通讯中HttpRestful请求如何封装
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,小编给大家分享一下Unity3D网络通讯中HttpRestful请求如何封装,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!整理代码脚本我们在Scripts下建了一个Model的文件夹
千家信息网最后更新 2025年02月02日Unity3D网络通讯中HttpRestful请求如何封装我们在Scripts下建了一个Model的文件夹(存放对象类)和一个Utils的文件夹(存放工具类),然后把WeatherForecase类移动到Model下,在Utils文件夹下再创建一个Network的文件夹,用于处理网络通讯,然后在这文件夹下创建一个HttpRestful的C#脚本。
定义一个静态实例,然后写对应的实例方法获取方法。
写Get的协程方法调用,其中最后一个参数就是Action的方法,其中Action的第一个参数bool,用于返回通讯的成功或失败,第二个参数string是返回的通讯信息。
外部调用的Get方法传入的参数一样,内部是直接开户协程操作,下面的Post的实现也是按这个思路来写,只不过传入的参数里要加入一个我们传入的数据即可。
我们重新复制了一个UIScripts,然后其中一个名字后面加上了Old,这样就是不用再重新设置了,我们直接在UIScripts脚本中改造即可。
首先定义一个Action,其中参数和HttpRestful里传入的Action方法是一样的。
然后增加一个InitAction的方法,里面对定义的actionRes写其的实现方法。方法中就是判断通讯如果失败直接显示文本,成功后进行处理,再显示处理后的数据,因为Get和Post调用后返回的数据类型是一样的,这样我们这里写了一个Action都可以调用这个方法进行后面的数据处理。
然后我们在Start里面首先把初始化Action进行调用,然后使用
就可以直接进行数据处理了,剩下的我们昨天调用的方法就可以都删除了。
上图就是封装后调用WebApi的实现效果,后面我又在Android平台下进行了编译,调用也完全没有问题,这种方式可以跨平台使用的。
小编给大家分享一下Unity3D网络通讯中HttpRestful请求如何封装,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
整理代码脚本
02
HttpRestful封装
HttpRestful完整代码
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
using UnityEngine.Networking;
public class HttpRestful : MonoBehaviour
{
private static HttpRestful _instance;
public static HttpRestful Instance
{
get
{
if(_instance == null)
{
GameObject goRestful = new GameObject("HttpRestful");
_instance = goRestful.AddComponent
(); }
return _instance;
}
}
#region Get请求
///
/// Get请求
///
///
///
public void Get(string url, Action
actionResult = null) {
StartCoroutine(_Get(url, actionResult));
}
private IEnumerator _Get(string url, Action
action) {
using (UnityWebRequest request = UnityWebRequest.Get(url))
{
yield return request.SendWebRequest();
string resstr = "";
if (request.isNetworkError || request.isHttpError)
{
resstr = request.error;
}
else
{
resstr = request.downloadHandler.text;
}
if (action != null)
{
action(request.isHttpError, resstr);
}
}
}
#endregion
#region POST请求
public void Post(string url, string data, Action
actionResult = null) {
StartCoroutine(_Post(url, data, actionResult));
}
private IEnumerator _Post(string url, string data, Action
action) {
using (UnityWebRequest request = new UnityWebRequest(url, "POST"))
{
request.uploadHandler = new UploadHandlerRaw(Encoding.UTF8.GetBytes(data));
request.SetRequestHeader("content-type", "application/json;charset=utf-8");
request.downloadHandler = new DownloadHandlerBuffer();
yield return request.SendWebRequest();
string resstr = "";
if (request.isNetworkError || request.isHttpError)
{
resstr = request.error;
}
else
{
resstr = request.downloadHandler.text;
}
if (action != null)
{
action(request.isHttpError, resstr);
}
}
}
#endregion
}
03
调用HttpRestful
HttpRestful.Instance.Get(url, actionRes);HttpRestful.Instance.Post(url, json, actionRes);
UIScipts完整代码
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
public class UIScripts : MonoBehaviour
{
[Header("按钮")]
public Button btnget;
public Button btngetparm;
public Button btnjson;
public Button btnpost;
[Space]
[Header("显示")]
public Text txtshow;
[Space]
[Header("输入框")]
public InputField edturl;
public InputField edtparm;
//定义一个返回数据的Action
private Action
actionRes; // Start is called before the first frame update
void Start()
{
InitAction();
//Get按钮操作
btnget.onClick.AddListener(() =>
{
Debug.Log(edturl.text);
string url = edturl.text;
HttpRestful.Instance.Get(url, actionRes);
});
btngetparm.onClick.AddListener(() =>
{
string url = edturl.text;
string param = edtparm.text;
string allurl = url + "/Info?Summary=" + param;
HttpRestful.Instance.Get(allurl, actionRes);
});
btnjson.onClick.AddListener(() => StartCoroutine(JsonConvert()));
btnpost.onClick.AddListener(() =>
{
WeatherForecast item = new WeatherForecast();
item.Summary = "Alvin";
item.Date = DateTime.Now;
item.TemperatureC = 10;
item.TemperatureF = 20;
string json = JsonUtility.ToJson(item);
string url = edturl.text + "/Reg";
Debug.Log(url);
HttpRestful.Instance.Post(url, json, actionRes);
});
}
///
/// 写返回Action的处理方法
///
private void InitAction()
{
actionRes = new Action
((bl, str) => {
if (bl)
{
txtshow.text = str;
}
else
{
string resjson = "{\"array\":" + str + "}";
txtshow.text = resjson;
WeatherData lists = JsonUtility.FromJson
(resjson); StringBuilder sb = new StringBuilder();
foreach (WeatherForecast item in lists.array)
{
sb.Append("Date:" + item.Date + " Summary:" + item.Summary + " TemperatureF:"
+ item.TemperatureF + "TemperatureC:" + item.TemperatureC + "\r\n");
}
txtshow.text = sb.ToString();
}
});
}
IEnumerator JsonConvert()
{
WeatherForecast item = new WeatherForecast();
item.Summary = "Alvin";
item.Date = DateTime.Now;
item.TemperatureC = 10;
item.TemperatureF = 20;
string json = JsonUtility.ToJson(item);
txtshow.text = json;
yield return new WaitForSeconds(3f);
WeatherForecast newitem = JsonUtility.FromJson
(json); string showtext = "Summary:" + newitem.Summary + " Date:" + newitem.Date +
" C:" + newitem.TemperatureC + " F:" + newitem.TemperatureF;
txtshow.text = showtext;
}
}
实现效果
看完了这篇文章,相信你对"Unity3D网络通讯中HttpRestful请求如何封装"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!
方法
通讯
参数
数据
处理
文件
文件夹
封装
就是
网络
网络通讯
代码
脚本
成功
实例
按钮
效果
数据处理
篇文章
上图
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
华为网络技术认证考试
庆余年安卓服务器
山西网络安全管理处
福建制造执行系统软件开发
数据库配置管理器怎么关闭
灵韵网络技术有限公司
网络安全试卷 %3e试卷
手机防护服务器
服务器管理地址和exsi地址
广州嗨游网络技术有限公司
网络安全监测预警应急处置
xcode软件开发工具
北京服务器散热片定做
复高软件开发有限公司怎么样
王者语音服务器未响应
数据库学籍信息管理系统
专业供应的数据库分库分表
网络安全8个不信
上海服务器机柜批发厂家
企业留言板数据库设计
流放者柯南服务器架设
天气预报的定位服务器已关啥意思
数据库去重优化的问题
网络安全法正式颁布
公司网络服务器进不去
惠州安信网络技术公司
科技互联网创业渠道
软件开发的职业生涯道路
数据库数据完整性实验5
数据库如何建立外键联系