您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(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ò),可以把它分享出去讓更多的人看到。
免責(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)容。