【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+ 位图,此位图由图形图像 ...
随机推荐
- JIT和AOT的区别
http://net-informations.com/faq/qk/jit.htm Compilers are tools that convert human readable text into ...
- git log 的常用用法
1.最基本的 git log 2.简化版本 git log --oneline 3. 作者筛选 4.时间筛选 git log --since="2022.05.26" --unti ...
- webpackHotMiddleware改造成koa支持的中间件
const stream = require('stream'); const webpackHot = require('webpack-hot-middleware'); const PassTh ...
- Winform使用CefSharp和HttpWebRequest如何保持会话Session
之前我们使用CefSharp,在Winform中,使用ChromiumWebBrowser加载了web项目的页面.并且通过html页面的js调用了本地的窗口.那么下一个问题来了.为了保障系统安全性,项 ...
- QLineEdit CSS样式
QLineEdit{ border:1px groove gray; border-radius:18px; padding:2px 4px } QLineEdit:!hover { border-s ...
- Web Dynpro for ABAP(15):Print
3.20 Print WDA调用浏览器打印界面 1.创建Print按钮,绑定事件PRINT; 2.实现ONACTIONPRINT事件: method ONACTIONPRINT. DATA:l_api ...
- 在 C# 中调用FastReport 设计窗口
因为引入FastReport中的控件时报错,在网上又搜不到相应的解决办法 所以在这里动态添加 首先在创建的项目中引入FastReport.dll //创建一个空的报表 Report report = ...
- Unity编辑器脚本
1.给选中物体添加碰撞盒 这个是给子物体添加碰撞盒 (根据需求可以自己修改) 脚本放在Editor文件夹下 需要手动选择你需要添加碰撞盒的物体 using System.Collections; ...
- 三分钟梳理TDengine安装部署的逻辑
小 T 导读:TDengine,是涛思数据面对高速增长的物联网大数据市场和技术挑战推出的创新性的大数据处理产品,除却读写性能.存储压缩能力强大之外,还有安装简单.操作难度低等优势.今天我们就从常 ...
- hadoop单机测试环境安装(简)
1.下载hadoop官网就可以下载.可以直接搜hadoop , 其实可以直接查看官网的版主文档搭建https://hadoop.apache.org/docs/stable/hadoop-proj ...