91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

UnityWebRequest前后端交互的實現方法

發布時間:2020-06-29 16:13:06 來源:億速云 閱讀:641 作者:清晨 欄目:開發技術

這篇文章將為大家詳細講解有關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做了一些封裝、利用反射、委托等特性來實現一些基本的功能

關于UnityWebRequest前后端交互的實現方法就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

彰武县| 东兴市| 汾阳市| 六盘水市| 汝州市| 武邑县| 塘沽区| 札达县| 富锦市| 黄平县| 临漳县| 蒙自县| 婺源县| 高州市| 盐亭县| 潞西市| 礼泉县| 若尔盖县| 元江| 灵寿县| 土默特右旗| 赫章县| 绥宁县| 固始县| 滨海县| 余干县| 虎林市| 台南县| 德保县| 家居| 泸溪县| 连江县| 房山区| 安岳县| 鸡西市| 革吉县| 农安县| 百色市| 长治市| 桓台县| 江孜县|