
tolua源码分析
文章平均质量分 94
异次元的归来
Game_Develop_Forever
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
tolua源码分析(十一)代码生成
接下来调用的是GenRegisterFuncItems函数,这个函数就是扫描类的导出方法,过滤掉类的重载操作符方法,这部分需要特殊处理。第一部分就是普通导出类的注册过程,第二部分是对所有用到的委托类型增加导出函数,这个与上文类似,就是方便lua层直接构造委托,最后一个部分是preload,实际上是一个延迟加载逻辑,这里面的导出类,不会在Bind的时候就注册,而是在lua层调用require的时候,才会注册进来。接下来就是遍历这个BindType类型的list,对每个type生成对应的wrap文件。原创 2023-09-17 19:17:01 · 712 阅读 · 0 评论 -
tolua源码分析(十)struct
向lua层传递struct,就是将C#的struct拆分成若干基本类型,依次push到lua栈,然后调用lua层对应struct的new函数,创建lua层的struct;这么做的原因是在lua层使用struct的方法时,不需要跑到C#层去调用C#的接口,对于struct来说,它往往只是一个保存数据的结构,包含的方法都比较简单,lua层去实现完全可以胜任。函数,所以这里的push实际上是把C#的Rect的每个数据成员都拆出来,作为基本类型挨个push到lua层,然后调用lua层的。原创 2023-07-30 15:07:27 · 378 阅读 · 1 评论 -
tolua源码分析(九)反射
由上文可知,typeof(Vector3)返回的是C#的Type类型,代表C#的Vector3,那么调用MakeArrayType得到的就是Vector3[]的Type类型。这里lua代码第2行也调用了全局的typeof,而这里传入的不是string,Vector3我们之前提到过是lua层自己实现的一个table,对于table类型来说,如果type缓存中不存在,则调用的是C#的。由于这里反射的函数是静态无参并且没有返回值的,因此lua层并不需要提供额外的参数给C#,也不需要从C#层获取返回值信息。原创 2023-07-08 16:19:00 · 537 阅读 · 0 评论 -
tolua源码分析(八)lua扩展继承C#类
之所以对所有的vptr table都设置同样一个这样的metatable,其原因是它们的逻辑是完全相同的,唯一不同就是各自绑定的userdata不同,因此只需要在metatable的元方法中,把vptr table绑定的userdata传进去就行了,没必要为每个vptr table都设置一个单独的metatable。当然,如果访问的是子类没有重写过的父类方法,则这里的判断都不会命中,会进而获取userdata的metatable,也就是前面我们所说过的class table,进行递归查找。原创 2023-06-17 15:55:41 · 473 阅读 · 0 评论 -
tolua源码分析(七)带out参数的C#函数
之前我们提到过,把C#层的Ray push到lua层是不会产生gc的,那么反过来,从lua层取出C#的Ray是如何做到没有gc的呢?可以看出,一个C#的Ray其实被拆成了6个float,传到了lua层,然后lua层重新组装一遍,成为lua层的Ray。这个函数会把C#层定义的所有Layer传递给lua,在lua层新建一个Layer table,key为name,value为layer的值,这个值是一个int,所以最后一个参数的类型也是number。上,在lua层真正用到时,才会触发注册流程。原创 2023-06-10 15:29:55 · 426 阅读 · 0 评论 -
tolua源码分析(六) C#委托使用lua函数的机制实现
这个最常见的用法要数UI了,例如C#的UI Button上有个ActionClick的委托,它会在Button被玩家按下的时候触发,而触发后具体执行的逻辑我们希望在lua层实现,因此我们就需要在lua层,往这个C#委托上绑定函数。两个方法,可以看出带有self的方法,就是把构造时传入的self,当作函数的一个参数压入lua栈,给lua层调用,这就支持了lua层带有self语法糖的函数,这样的函数也可以绑定到C#的委托上。的调用,它接受一个listener的参数,这个listener是从C#层传入的,它是。原创 2023-05-27 13:03:51 · 929 阅读 · 0 评论 -
tolua源码分析(五)lua使用C#的enum
本节我们主要探讨在lua中如何使用C#的enum。原创 2023-05-20 13:14:19 · 559 阅读 · 0 评论 -
tolua源码分析(四)lua调用C#函数机制的实现
上一节我们讨论了C#是如何访问lua变量的,这次我们将研究lua是如何访问到C#函数的。原创 2023-04-09 15:51:10 · 905 阅读 · 0 评论 -
tolua源码分析(三)C#访问lua变量的机制实现
上一节我们讨论了C#是如何获取并调用到lua定义的函数,这一节我们更进一步,来看看如何让C#可以访问lua定义的变量的。原创 2023-03-25 15:06:27 · 586 阅读 · 0 评论 -
tolua源码分析(二) C#调用lua函数的机制实现
本节我们来深入理解tolua是如何实现C#调用lua函数的。原创 2023-03-04 16:19:36 · 1000 阅读 · 0 评论 -
tolua源码分析(一) tolua的初始化流程
tolua是一个Unity静态绑定lua代码的解决方案,本文是源码分析系列的第一篇,主要围绕tolua初始化流程相关的代码进行分析。原创 2023-02-18 16:50:40 · 1177 阅读 · 0 评论