写在前面
- 我第一次接触到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。
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。在具体敲代码过程中,也不考虑起名、改名和优化问题,虽然常有优化源码的冲动,但这确实不是实现重点,不过可以在注释里补上说明。放弃“我把这系列的博文看完就能了解热更重点”的想法,只在遇到具体问题时去查相关博客,后来我发现在实现整个框架内容后再回去看这些博客,能很清楚这些博客的讲述重点。