一.前言
toLua系列文章,如果只看一篇文章的话,那么就看这篇了。假设这样一个场景,你将精通ToLua这样一个描述写在简历里,来提高面试通过率,当面试被问到ToLua时,最可能会被问到什么?
我来回答这个问题:使用ToLua的项目中,C#中增加一个类,Lua如何访问这个类的。本文将致力于这个问题的研究。
二.通过main场景理解调用关系
2.1 首先main场景运行后如下所示,我们研究的是PromptPanel这个对象

2.2 以访问AppConst的GameFrameRate为例,跟踪调用来源

2.3 LuaFramework_AppConstWrap类中做了对AppConst的类名,方法,变量,常量的注册

2.4 注册方法来自LuaState类

2.5 LuaState类中调用的是LuaDLL中的外部方法

2.6 LuaDLL中调用的是tolua.dll中的方法


2.7 下周tolua_runtime查看tolua.dll源码
下载链接:
https://github.com/topameng/tolua_runtime
tolua_function:


可以看到调用的是LuaC的API
三.ToLua中菜单用法
3.1 Clear wrap files

操作完Clear wrap files后,会弹出下面对话框,点确定后变化的文件会变回去,为了查看变化的文件,我们这里点取消

通过SVN查看文件变化,可以看到Generate目录下Wrap文件被删除了,LuaBinder和DelegateFactory文件修改了

LuaBinder变化

DelegateFactory变化

3.2 Gen Lua Wrap Files
生成全部Wrap文件
3.3 Gen Lua Delegates
生成DelegateFactory.cs
3.4 Gen LuaBinder File
生成LuaBinder.cs
3.5 GenLuaWrap + Binder
生成全部Wrap文件 + LuaBinder.cs
3.6 Generate All
生成全部Wrap文件 + LuaBinder.cs + DelegateFactory.cs
四. CSharp新加一个类,Lua获取的步骤
4.1 准备一个Csharp类:Test1

4.2 CustomSettings中加入Test1
4.3 执行菜单Lua->Generate All
会修改LuaBinder以及生成Test1的Wrap文件


4.4 Lua中访问Test1

注意C#的类若放在命名空间中,Lua访问时需用【命名空间.类名】的格式访问
