关于Unity和XLua的一些常用方法记录

没想到时隔两年又重新开始写Lua了,在又蹭两年经验之后再看之前记录的坑,都又有了新的理解,现在就都再完善一下吧。
原来写lua时的记录

先完善之前记录的一些问题吧

问题1:我明明写了lua脚本却找不到,或者找不到某个lua脚本的方法,调用时显示nil或者不存在等等。

原因: 这个主要就是require的用法,其实就是代码切分的一种实现方式,如果你想到找到这个引用某个脚本内的一个方法,首先你要先找到这个脚本的位置。require就是这个找的方法。

问题3:找得到lua脚本,调用不了lua方法。

原因:lua里面调用方法的的方式有两种,一种是通过点 . 直接点出方法。
一种是通过:来调用出方法。

这个之前解释其实也是有问题的,应该这么来讲,对于lua调用C#的方法的话静态方法可以通过点直接点出来。 而当对象引用成员变量时(即调用成员方法时),会隐形调用this,等同于lua中的self。这个时候就需要用:来调用。
而lua也是一样的,用:时,其实是给函数添加隐藏的第一个参数self;调用时,默认把当前对象作为第一个参数传递进去;这样就可以使用self的成员变量了。

问题4:我同一个脚本里定义的一个数据 ,在这个脚本里调用却有问题或为nil。
原因:可能与你定义数据的位置有关。把数据定义在调用位置上试试。

Lua是一门解释型语言,运行时使用解析器执行代码,所以是区分代码先后顺序的,即不能先调用再定义。

以下为新增的一些常用的需要注意的点

1:#table获取的数据数量只能获得连续的index的数量。对于不规则的table并不适用。
2:for index, value in ipairs(myTable) do -- body end
这个方法同上,只能对规则的table做遍历。

3:Xlua调用C#静态方法 规则:CS.命名空间.类名.成员变量
Xlua实例化 C#类 规则(可以理解为调用了对应类的构造方法):CS.命名空间.类名()
Xlua调用枚举 规则:CS.命名空间.枚举名.枚举值
4:类扩展需要给扩展方法编写的静态类添加[LuaCallCSharp],否则无法调用到。

简单的总结

1:如果只使用xlua的话写代码逻辑的话只需要关注一下Xlua和C#的互相调用,和lua语法即可。
2:如果更深入一点需要通过lua搭建游戏框架的话则需要对lua里table这个概念深入理解了。即lua的数据结构都是table。
3:写lua选个合适插件事半功倍,比如插件能提供一些代码补全,高亮和简单跳转。虽然不如C#那么全面,但也能满足基本需求。(我现在用的是Vscode+Emmylua插件,但好像只能挑转方法,不能跳转属性。)

以上。

猜你喜欢

转载自blog.csdn.net/qq_39860954/article/details/119703239