溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

UnityWebRequest前后端交互的實(shí)現(xiàn)方法

發(fā)布時(shí)間:2020-06-29 16:13:06 來源:億速云 閱讀:630 作者:清晨 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)UnityWebRequest前后端交互的實(shí)現(xiàn)方法,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

一、技術(shù)概述

1、描述這個(gè)技術(shù)是做什么?

是Unity一套網(wǎng)絡(luò)工具庫,用于進(jìn)行Http請求

2、學(xué)習(xí)該技術(shù)的原因?

項(xiàng)目需要,防止使用C#原生的網(wǎng)絡(luò)庫,加快開發(fā)速度

3、技術(shù)的難點(diǎn)在哪里

Unity僅提供了基礎(chǔ)的功能,如何把這些功能構(gòu)造成一個(gè)能夠穩(wěn)定業(yè)務(wù)開發(fā)的流程是一個(gè)比較難處理的問題

二、技術(shù)詳情

描述你是如何實(shí)現(xiàn)和使用該技術(shù)的,要求配合代碼和流程圖詳細(xì)描述。

HttpCenter類:封裝Get、Post、Put、Delete,維護(hù)一個(gè)請求隊(duì)列

///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);
      }

工程中如何使用:封裝請求、數(shù)據(jù),注冊委托,調(diào)用委托并添加回調(diào)

  //部分封裝
  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);
    };
  }
  ///調(diào)用,添加回調(diào)
  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");
         });
       });

三、技術(shù)使用中遇到的問題和解決過程

關(guān)于WebRequest中有個(gè)奇怪的問題,至今未搞懂,但是有暫時(shí)的解決方法。問題是Post方法直接設(shè)置失效,需要先聲明為Put,之后再www.method = UnityWebRequest.kHttpVerbPOST;


主要是基于UnityWebRequest做了一些封裝、利用反射、委托等特性來實(shí)現(xiàn)一些基本的功能

關(guān)于UnityWebRequest前后端交互的實(shí)現(xiàn)方法就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI