您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關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前后端交互的實現方法就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。