【Unity】阅读LuaFramework_UGUI的一种方法
写在前面
- 我第一次接触到LuaFramework_UGUI是在一个工作项目中,当时也是第一次知道toLua。但我刚开始了解LuaFramework_UGUI时十分混乱,甚至将LuaFramework_UGUI等同于toLua。在读很多LuaFramework_UGUI相关博客时也常感到一头雾水,比如在读完4篇“基础知识”博客后,我对LuaFramework_UGUI更新流程仍然是一知半解。我试过直接在LuaFramework_UGUI里加入自己的测试UI,虽然也能成功更新出现,但我认为这并不是一次合格的探索,我只是简单的知道了怎么用,但我并没了解到重点——热更流程。后面我在回顾LuaFramework_UGUI时才理清楚这些混乱的原因。
- 本篇博文重点不在阐述LuaFramework_UGUI热更流程,而在记录我当时阅读LuaFramework_UGUI时做了什么才觉得混乱,以及如何解决混乱的介绍,不涉及具体代码。
混乱
- 【混乱1】直觉混乱:我首先接触到是LuaFramework_UGUI框架,通过同事了解到项目是使用toLua来解决热更问题,所以我直觉上把将LuaFramework_UGUI等同于toLua,虽然我看过toLua在Github上提及到LuaFramework_UGUI是在“FrameWork and Demo”一栏,但我当时认为那是toLua作者为了演示热更才另开一个库叫LuaFramework_UGUI。
- 【混乱2】阅读混乱:因为我直接开始阅读LuaFramework_UGUI代码,脑中冒出有很多问题,有些问题很重要,例如热更流程,而有些问题特别琐碎,例如作者为什么要设计这个结构,为什么要用这个工具,我认为我不会忘记最重要的问题,而有些琐碎问题当时查了资料就明白了,所以没有对所有问题做记录。在一次次测试中常忘了代码阅读到了哪里,所以确认进度也花了时间。
- 【混乱3】目的混乱:我关注重点是LuaFramework_UGUI如何实现热更,但在看代码的过程中常被不认识的知识带跑。在看相关博客时,也有“我把这系列的博文看完就能了解热更重点”的做法。虽然我有过直接在LuaFramework_UGUI里加入自己UI检验热更的测试,但我认为到这里已经是“明白怎么用”的程度,后续探索就戛然而止。
解决混乱
想要解决之前的混乱,真正完整明白自己的关注重点,我现在只想到了一个笨办法,那就是自己另开一个测试工程,把LuaFramework_UGUI自己实现一遍。现在的我已经有了一些经验,能保证自己的重点不会跑偏,而且自己实现一遍也能回忆起之前错过的所有问题,补上解答。
我在回顾LuaFramework_UGUI时发现其作者已经停止更新此框架,而且也有了V2版的LuaFramework_UGUI(也已停更),现在他的热更框架已经到FinalFramework。我浏览了FinalFramework的演示内容,想过要不从实现FinalFramework开始,但考虑到以前有对LuaFramework_UGUI的踩坑笔记,从一个新框架开始会很费时间,而且这和我的重点有点南辕北辙,于是回到原先的LuaFramework_UGUI框架上。
- 【解决 混乱1】在测试工程上写东西前,我去回顾了toLua和LuaFramework_UGUI的G站介绍,再次把二者下载下来运行,现在看它们的区别就很明显了。最直观的印象是toLua带了20多个例子,但只关心热更的读者是找不到明显讲热更内容例子的,而LuaFramework_UGUI一运行就会看到一个UI面板,点击UI面板右下方按钮会有反应。这时候再次看toLua和LuaFramework_UGUI的G站介绍就很容易理解:toLua的应用框架示例中有LuaFramework_UGUI,toLua自身并无热更示例,想看热更示例请直接跳到LuaFramework_UGUI。
- 【解决 混乱2】我是在一个什么内容也没有的测试工程上开始写LuaFramework_UGUI的代码,开了一个新的word文档来记录我所有的问题,现在里边记录的问题已经不止探索LuaFramework_UGUI过程中遇到的问题,还包括了最最开始选框架的问题——如果我是主程,我为什么非得选toLua框架。按人的认知顺序,我是从负责运行启动的C#脚本开始写,实现目标只有一个——和LuaFramework_UGUI一样,弹出面板,点击按钮有回应。不清楚的内容先在注释里写上标记(使用相同的固定符号能帮助我再次看到这段代码时明白我是没写还是有没解决的问题),等待后续完善。代码进度记录记在桌面便签里方便查看(我记的是脚本名+代码行数)。通过一次次测试,我发现我实现的内容和LuaFramework_UGUI引导顺序一样,先要写打包部分,后写启动和检测是否需要更新部分。我写到后期Lua内容时就发现必须加入toLua,这时我将测试工程内容搬到toLua工程中,但在后面测试时我发现它和LuaFramework_UGUI用的toLua还是有些不一样,LuaFramework_UGUI作者在toLua里加入一些了新功能(在LuaFramework_UGUI的G站介绍的更新日志里有提到),但如何往toLua加新功能并不是我关注的重点,所以我直接用LuaFramework_UGUI的toLua部分替代了我的测试工程toLua部分。
- 【解决 混乱3】因为实现重点是如何热更,所以有很多内容不应关心:服务器代码是第一个最不关心的,而在客户端这边,因为我之前有写过和服务器通信代码的经验,所以LuaFramework_UGUI的和服务器通信这一部分忽略,我直接拷过来用。UI具体显示内容也不是关心重点,也拷过来用。一看就不相关的代码一律不写直接拷,比如TimerManager。在具体敲代码过程中,也不考虑起名、改名和优化问题,虽然常有优化源码的冲动,但这确实不是实现重点,不过可以在注释里补上说明。放弃“我把这系列的博文看完就能了解热更重点”的想法,只在遇到具体问题时去查相关博客,后来我发现在实现整个框架内容后再回去看这些博客,能很清楚这些博客的讲述重点。
【Unity】阅读LuaFramework_UGUI的一种方法的更多相关文章
- 使用 Unity* 进行并行处理的一种方法
本文展示如何使用 Unity* 对游戏进行并行处理,以及如何使用游戏引擎执行与游戏相关的物理.在这个领域内,现实感是成功的一个重要标志.为了模拟真实世界,许多动作需要同时发生,这需要并行处理.创建两个 ...
- python 多线程编程之threading模块(Thread类)创建线程的三种方法
摘录 python核心编程 上节介绍的thread模块,是不支持守护线程的.当主线程退出的时候,所有的子线程都将终止,不管他们是否仍在工作. 本节开始,我们开始介绍python的另外多线程模块thre ...
- unity 改变鼠标样式的两种方法
1.第一个直接改变鼠标样式 public var cursorTexture:Texture2D; private var changeFlag = false; function Update(){ ...
- Unity iOS 项目的一种性能评测方法
[Unity iOS 项目的一种性能评测方法]
- JAVA 集合 List 分组的两种方法
CSDN日报20170219--<程序员的沟通之痛> [技术直播]揭开人工智能神秘的面纱 程序员1月书讯 云端应用征文大赛,秀绝招,赢无人机! JAVA 集合 List 分组的两种方法 2 ...
- DataTable 转换成 Json的3种方法
在web开发中,我们可能会有这样的需求,为了便于前台的JS的处理,我们需要将查询出的数据源格式比如:List<T>.DataTable转换为Json格式.特别在使用Extjs框架的时候,A ...
- [转载]Javascript异步编程的4种方法
NodeJs的最大特性就是"异步" 目前在NodeJs里实现异步的方法中,使用“回调”是最常见的. 其实还有其他4种实现异步的方法: 在此以做记录 --- http://www.r ...
- python获取字母在字母表对应位置的几种方法及性能对比较
python获取字母在字母表对应位置的几种方法及性能对比较 某些情况下要求我们查出字母在字母表中的顺序,A = 1,B = 2 , C = 3, 以此类推,比如这道题目 https://project ...
- Javascript定义类(class)的三种方法
将近20年前,Javascript诞生的时候,只是一种简单的网页脚本语言.如果你忘了填写用户名,它就跳出一个警告. 如今,它变得几乎无所不能,从前端到后端,有着各种匪夷所思的用途.程序员用它完成越来越 ...
- 使用C#进行图像处理的几种方法(转)
本文讨论了C#图像处理中Bitmap类.BitmapData类和unsafe代码的使用以及字节对齐问题. Bitmap类 命名空间:System.Drawing 封装 GDI+ 位图,此位图由图形图像 ...
随机推荐
- MySQL 5.7升级8.0过程(详解)
记一次MySQL 5.7升级8.0的详细过程,聊聊我的思路,希望可以帮助大家. 以一个例子为切入点 一.升级背景 为什么要升级到MySQL8.0?大概多久进行一次? 大家可以参考下图记录的各个版本的发 ...
- 如何让一个 div 左右各空一定距离然后 div 占满剩下的宽度?
如何让一个 div 左右各空一定距离然后 div 占满剩下的宽度? 最开始想到的方法就是 div 宽度取 n%, style 设置 margin:auto. 但是这样有一个问题,一定距离是根据 n 的 ...
- recastnavigation计算三角形离给定点最近位置方法简单注释
三角形 在recastnavigation中,三角形是最基础的元素,很多逻辑都是基于三角形进行的,其中比较常见的一个操作就是计算指定点到某三角形上的最近距离.由于三角形通常代表行走面,而给定点P可能是 ...
- constexpr和const
const表示一个变量的值不能改变,这个值可以使运行期间得到的const int sz = get_size(); constexpr是提示编译器,该值可以在编译期间就计算出来,并进行替换,不用等到运 ...
- SpringCloud-Hoxton.SR1-config整合
1.前一篇讲到了整合eureka和gateway,实现了服务的发现与注册以及网关的统一入口,这一篇在此基础上整合分布式配置中心config,首先新建一个子项目config-services作为服务端, ...
- Docker--搭建 Gitlab 容器并上传本地项目代码
本文参考:https://www.cnblogs.com/poloyy/p/13969756.html 搭建 Gitlab 容器 搜索 gitlab 镜像 docker search gitlab 创 ...
- Javascript基础知识整理(引用类型-Array)
Array Array是一组数据的有序列表,在ECMAScript中,数组的每一项可以是不一样的数据类型. 创建数组有两种方式 (1)使用构造函数 var colors = new Array(); ...
- 射频识别技术(RFID)
概述: 无线射频识别即射频识别技术(Radio Frequency Identification,RFID),是自动识别技术的一种,通过无线射频方式进行非接触双向数据通信,利用无线射频方式对记录媒体( ...
- Web实时通信之SignalR
前言 对于B/S模式的项目,基础的场景都是客户端发起请求,服务端返回响应结果就结束了一次连接:但在很多实际应用场景中,这种简单的请求和响应模式就显得很吃力,比如消息通知.监控看板信息自动刷新等实时通信 ...
- pycharm 安装步骤
1.双击安装包 2.点击next 3.选择安装目录后点击next进入下一步 4.根据你电脑的实际情况选择安装32位还是64位 5.勾选 .py 后即可点击next进入下一步 6.默认,直接next 7 ...