一、技术概述
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做了一些封装、利用反射、委托等特性来实现一些基本的功能
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍SSM框架前后端信息交互实现流程详解,包括了SSM框架前后端信息交互实现流程详解的使用技巧和注意事项,需要的朋友参考一下 一、从前端向后端传送数据 常见的3种方式 1、form表单的action:此方法可以提交form表单内的输入数据,也可同时提交某些隐藏但设置有默认值的<input>,如修改问题时,我们除了提交问题的相关信息,还需要将用户的编号提交给后端,此时就可以设置一个默认值为
本文向大家介绍ASP.NET使用AjaxPro实现前端跟后台交互详解,包括了ASP.NET使用AjaxPro实现前端跟后台交互详解的使用技巧和注意事项,需要的朋友参考一下 使用 AjaxPro 进行交互,很多人都写过文章了,为什么还要继续老生常谈呢。因为有一些细节上的东西我们需要注意,因为这些细节如果不注意的话,那么程序会报错,而且维护性较差。 引言 一.首先,还是那句话,欲练神功,必先自宫。我们
本文向大家介绍实现前后端数据交互方法汇总,包括了实现前后端数据交互方法汇总的使用技巧和注意事项,需要的朋友参考一下 此文章适合前后端协同开发经验不足的新手阅读。 HTML赋值 输出到 Element 的 value 或 data-name 渲染结果 使用 JS 获取 优点: 不占用全局变量,由 JS 自由获取。 使用建议: 适合传递简单数据,也非常适合多个简单数据与 Element 绑定关系。 J
前面的章节,我们主要从什么是 Ajax、为什么要用 Ajax、Ajax 是如何实现的以及如何封装一个 Ajax来对 Ajax 做一个多方位的学习。从前面章节的学习中,相信同学们对 Ajax 都会有一个比较完整的概念了。那么,接下来的这个章节,我们着重列举一个示例,来讲述 Ajax 是如何进行前后端交互的。 本章须知 本章节会给出前后端简单代码,弱化容错性等增强性需求,重点描述前后端交互的过程和效果
本文向大家介绍利用Node.js+Koa框架实现前后端交互的方法,包括了利用Node.js+Koa框架实现前后端交互的方法的使用技巧和注意事项,需要的朋友参考一下 前言 对于一个前端工程师来说不仅仅要会前端的内容,后端的技术也需要熟练掌握。今天我就要通过一个案例来描述一下前端是如何和后端进行数据交互的。 koa 是由 Express 原班人马打造的,致力于成为一个更小、更富有表现力、更健壮的 We
我想建立小型应用程序。会有一些用户。我不想做自己的用户系统。我想将我的应用程序与oauth/oauth2.0集成。 集成我的前端应用程序和oauth 2.0没有问题。有很多有用的文章,如何做到这一点,即使在 stackoverflow.com 上。例如,这篇文章非常有帮助。 但是。在前端成功授权后,我该怎么办?当然,我可以在客户端上有标志,上面写着“好的,伙计,用户已通过身份验证”,但是我现在应该