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

 更新时间:2020年06月29日 12:01:56   作者:liulaoc  
这篇文章主要介绍了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<LoginMsg, Action<HttpResponds>> 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<T>(ref Action<T,Action<HttpResponds>> 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<User>(getUserResponds.data);
           UIMgr.Instance.CreateFrame("PersonalFrame");
         });
       });

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

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

四、总结

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

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

相关文章

  • 比较有效的使用C#读取文件的代码

    比较有效的使用C#读取文件的代码

    比较有效的使用C#读取文件的代码...
    2007-08-08
  • C# LINQ to XML应用介绍

    C# LINQ to XML应用介绍

    .Net又引入了LINQ,于是LINQ to XML也就应运而生,所以在.Net中,不仅可以用W3C XML DOM标准,还可以使用LINQ to XML来操作XML文档。下面就来简单介绍一下如何使用LINQ to XML
    2012-11-11
  • C#封装的Sqlite访问类实例

    C#封装的Sqlite访问类实例

    这篇文章主要介绍了C#封装的Sqlite访问类,实例分析了C#针对Sqlite数据库各种常用操作的相关技巧,需要的朋友可以参考下
    2015-04-04
  • 读取图片像素的具体实例

    读取图片像素的具体实例

    C#读取图片像素的具体实例,需要的朋友可以参考一下
    2013-06-06
  • C#中HttpWebRequest、WebClient、HttpClient的使用详解

    C#中HttpWebRequest、WebClient、HttpClient的使用详解

    这篇文章主要介绍了C#中HttpWebRequest、WebClient、HttpClient的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • C# 中文简体转繁体实现代码

    C# 中文简体转繁体实现代码

    C# 中文简体转繁体实现代码,需要的朋友可以参考一下
    2013-02-02
  • 详解C#如何解决程序卡顿的问题(多线程初步学习)

    详解C#如何解决程序卡顿的问题(多线程初步学习)

    在编写程序的时候,有时候难免会出现后台运行时间过长的问题,这个时候就要考虑多线程的操作了,所以本文给大家介绍了C#解决程序卡顿问题的方法,需要的朋友可以参考下
    2024-04-04
  • WPF实现动画效果的入门教程

    WPF实现动画效果的入门教程

    WPF是一种用于创建Windows客户端应用程序的UI框架,它让我们能够创建丰富的图形界面,包括各种各样的动画效果,下面我们就来看看如何利用wpf实现简单的动画效果吧
    2023-09-09
  • C#.NET 图片水印添加代码

    C#.NET 图片水印添加代码

    这篇文章主要为大家详细介绍了C#.NET 图片水印添加代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • C#实现学生模块的增删改查

    C#实现学生模块的增删改查

    这篇文章主要为大家详细介绍了C#实现学生模块的增删改查,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01

最新评论