基于Lua的Unity热更解决方案 – 2.学习LuaFramework_UGUI

【Tolua】
1.Tolua介绍
Tolua是Unity静态绑定lua的一个解决方案,它通过C#提供的反射信息分析代码并生成包装的类。
它是一个用来简化在C#中集成lua的插件,可以自动生成用于在lua中访问Unity的绑定代码,并把C#中的常量、变量、函数、属性、类以及枚举暴露给lua。
它是从cstolua衍变而来。从它的名字可以看出,它是集成了原来的tolua代码通过二次封装写了一个C#与tolua(c)的一个中间层。

2.lua源码目录介绍
—3rd:里面是第三方的一些插件lua、实例源码文件,比如:cjson、pbc、pblua、sproto等。
—Common:公用的lua文件目录,如define.lua文件,一些变量声明,全局配置等,functions.lua常用函数库,通讯的protocal.lua协议文件。
—Controller:控制器目录,它不依赖于某一个Lua面板,它是独立存活在Luavm中的一个操作类,操作数据、控制面板显示而已。
—Logic:目录里面存放的是一些管理器类,比如GameManager游戏管理器、NetworkManager网络管理器,如果你有新的管理器可以放到里面。
—System:这个目录是cstolua的系统目录,里面存放都是一些常用的lua类,为了优化lua调用速度,用lua重写的unity常用类。
—View:这是面板的视图层,里面都是一些被Unity调用的面板的变量,走的是Unity GameObject的生命周期的事件调用。

3.链接
Tolua下载地址:https://github.com/topameng/tolua
官网文档地址:http://doc.ulua.org/default.asp

【LuaFramework_UGUI】
1.框架介绍
演示了将资源打包为AB包,通过校验文件的MD5值判断是否需要更新,需要更新的话下载差异文件的过程。
所以借用这个框架,我们只需要在Tolua里面写自己模块部分的逻辑就可以简单的实现热更新。
(lua属于解释性文件所以能通过www直接下载到本地,通过C#与lua交互,把逻辑写在lua里,从而实现代码热更新。)

2.运行设置
打开工程之后,先点击Lua菜单栏中的Generate All(生成Wrap文件);
再点击LuaFramework菜单栏中的Build Windows Resource(生成Windows下用的AB包);
然后点击运行,看到下图界面就算成功啦。

3.Lua Generate All流程:
—GenLuaAll{} – >
—GenLuaDelefates{}:生成委托绑定的代码->
—GenerateClassWraps{} :遍历所有需要导出的类,调用ToLuaExport.Generate生成类的绑定->
—GenLuaBinder{}:生成向lua注册C#类的绑定代码,不包含BaseType的注册

4.lua和C#的交互两个工具类:
LuaHelper.cs静态类   //lua调用C#
Util.cs                            //静态方法CallMethod C#调用lua

5.LuaFramework_UGUI启动流程:
—游戏客户端启动 Main Scene Main.cs -> StartUpCommand.cs 初始化一堆Manager ->
其中 GameManager.cs 如果是第一次打开先解压,再热更,如果解压过了就直接热更 ->
热更结束,启动LuaManager -> DoFile Game & Network -> Util.Call Game OnInitOK ->
—OnInitOK : 转到Lua这边初始化 ->
—require xxxPanel & CtrlManager.Init (new xxxCtrl 并 xxxCtrl.Awake) ->
xxxCtrl.Awake: 调用C#创建Panel ,创建好后回调xxxCtrl.OnCreate
(C#: PanelManager.CreatePanel & AddComponent LuaBehaviour & Call xxxpanel.Awake -> Lua: xxxPanel.Awake(obj) (绑定Text,Button等组件)) ;
OnCreate 对xxxPanel做逻辑 (给Text赋值,给Button添加点击事件等)

6.缺点
1)每次运行都要重新打AB包,降低开发效率
2)放了很多用不到的第三方库,比较冗余
3)C#和lua两边都没有场景管理

【参考】
1.https://www.jianshu.com/p/ef1e2641e0c6
2.https://blog.csdn.net/qq372072753/article/details/51074652

Add a Comment

您的电子邮箱地址不会被公开。 必填项已用*标注