栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

UnityWebRequest前后端交互实现过程解析

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

UnityWebRequest前后端交互实现过程解析

一、技术概述

1、描述这个技术是做什么?

是Unity一套网络工具库,用于进行Http请求

2、学习该技术的原因?

项目需要,防止使用C#原生的网络库,加快开发速度

3、技术的难点在哪里

Unity仅提供了基础的功能,如何把这些功能构造成一个能够稳定业务开发的流程是一个比较难处理的问题

二、技术详情

描述你是如何实现和使用该技术的,要求配合代码和流程图详细描述。

HttpCenter类:封装Get、Post、Put、Delete,维护一个请求队列

///Get方法例举
private IEnumerator StartGet(HttpRequest request)
    {
      var url = request.Url + "?";
      //反射用来填充Url
      Type type = Type.GetType(request.MsgName);
      var Msg = Convert.ChangeType(request.Msg, type);
      PropertyInfo[] properties = Msg.GetType().GetProperties();
      for (int i = 0; i < properties.Length; i++)
      {
 url += $"{properties[i].Name}={properties[i].GetValue(Msg)}";
 if (i != properties.Length - 1)
   url += "&";
      }
      request.Url = url;
      using (UnityWebRequest www = UnityWebRequest.Get(request.Url))
      {
 www.certificateHandler = new AcceptAllCertificatesSignedWithASpecificKeyPublicKey();
 www.downloadHandler = new DownloadHandlerBuffer();
 www.SetRequestHeader("Content-Type", "application/json");
 www.SetRequestHeader("token", token);
 yield return www.SendWebRequest();
 DealResult(www, request);
      }

工程中如何使用:封装请求、数据,注册委托,调用委托并添加回调

  //部分封装
  public Action> NetLogin;
  public class LoginMsg : baseMsg
  {
  public LoginMsg(string username, string password)
  {
    this.username = username;
    this.password = password;
  }
  public string username { get; set; }
  public string password { get; set; }
  }
  public class HttpResponds
  {
    public string data;
    public RespondsResult Result;
    public string token;
  }
  //注册委托
  AddListener(ref MsgManager.Instance.NetMsgCenter.NetLogin, Method.Post, "User/login");
  private void AddListener(ref Action> registerEvent,Method methodType,string url) where T:baseMsg
  {
    registerEvent += (request, callback) =>
    {
      HttpRequest httpRequest = new HttpRequest()
      {
 Msg = request,
 HttpMethod = Method.Post,
 Url = HttpCenter.path + url,
 Handler = (responds) =>
 {
   if (responds.Result == RespondsResult.Succ)
   {
     try
     {
callback(responds);
     }
     catch(Exception ex)
     {

Debug.Log("窗口已销毁");
if(nowScene == 0)
{
  SceneManager.LoadScene(1);
}
else
{
  SceneManager.LoadScene(0);
}
     }
   }
 }
      };
      HttpCenter.Instance.Send(httpRequest);
    };
  }
  ///调用,添加回调
  MsgManager.Instance.NetMsgCenter.NetLogin(msg, (responds) =>
{
  HttpCenter.Instance.token = responds.token;
  GetUserMsg userMsg = new GetUserMsg(accountField.text);
  MsgManager.Instance.NetMsgCenter.NetGetUser(userMsg, (getUserResponds) =>
  {
    NetDataManager.Instance.user = JsonHelper.DeserializeObject(getUserResponds.data);
    UIMgr.Instance.Createframe("Personalframe");
  });
});

三、技术使用中遇到的问题和解决过程

关于WebRequest中有个奇怪的问题,至今未搞懂,但是有暂时的解决方法。问题是Post方法直接设置失效,需要先声明为Put,之后再www.method = UnityWebRequest.kHttpVerbPOST;

四、总结

主要是基于UnityWebRequest做了一些封装、利用反射、委托等特性来实现一些基本的功能

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/121984.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号