toLua[八] main场景分析

一.前言

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访问时需用【命名空间.类名】的格式访问

相关推荐
寂寞的船1 天前
【Unity知识速递】第13期 Unity 内存泄漏排查实战:从 Memory Profiler 到 Lua 引用泄漏的生产级全链路诊断
unity·junit·c#·游戏引擎·lua
寂寞的船2 天前
【Unity Bug挑战】第12期 Awaitable 二次 await 死锁之谜 —— 为什么同一个异步操作等两次就卡死?
unity·c#·游戏引擎·bug
探求虚无3 天前
用 AI 在 Unity 里做一款 RTS:最难的不是生成代码,而是证明它真的能玩
人工智能·unity·游戏引擎
努力努力再努力wz4 天前
【Lua 进阶系列】从 C++ 对象到 Lua 变量:一文理解 userdata、Lua 栈与元表绑定机制
c++·junit·lua
17岁的勇气4 天前
Unity Shader unity文档学习笔记(二十二):shader变体
笔记·学习·unity
阿卡好可爱4 天前
Lua 热更新不生效:改完文件线上仍是旧逻辑,package.loaded 与 upvalue 重绑定详解
数据结构·分布式·后端·架构·lua
Joy T4 天前
Redis Lua 原子限流:Lua 脚本、竞态条件与并发控制
数据库·redis·lua·限流·竞态条件·redis scripting
寂寞的船5 天前
【Unity知识速递】第10期 Unity GC 零分配实战:从 UnityEngine.Pool 到手动 GC 控制的全链路优化
jvm·unity·c#·游戏引擎·lucene
寂寞的船7 天前
【Unity知识速递】第8期 IL2CPP 托管堆内存碎片与原生堆交互机制深度解析
unity·游戏引擎·交互
寂寞的船8 天前
【Unity知识速递】第5期 Unity 6.2 深度解析:AI Assistant 登场,World Space UI 与 Sentis 全面升级
人工智能·ui·unity