![](https://img-blog.csdnimg.cn/direct/59d743ae321b4dc4956d174969e38ef9.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
☀️Lua-The Milky Way
LuaState Luax toLua
许毅宏
勿忘初心,方得始终。I love you today and I will love you The rest of my life
展开
-
Unity-XLua(38)-定义C#泛型方法与扩展方法
一: lua 调用C#,需要在Xlua中生成“适配代码”,则在这个类打入一个[luaCallCSharp] 的标签。二: 如果lua调用C#的系统API ,则无法拿到源代码,无法打入标签。则 使用“静态列表”方式解决。然后把以上代码放入一个静态类中即可。三: 实际开发过程中,lua 调用C# 用的比较多。xlua 的优点体现的没有必要每次改的时候,都要生成代码。主要原理是依赖于编译器环境下,利用反射来动态生成代码接口。原创 2024-02-01 07:50:09 · 1887 阅读 · 0 评论 -
Unity-XLua(37)-Lua映射CSharp委托,接收多返回值结果
委托需要加入标记: [CSharpCallLua] lua 使用一个函数,来映射C#的委托。原创 2024-02-01 07:49:36 · 386 阅读 · 0 评论 -
Unity-XLua(36)-Lua映射CSharp结构体及接口参数
lua 使用一个表,来映射C#的结构体。原创 2024-02-01 07:49:00 · 398 阅读 · 0 评论 -
Unity-XLua(35)-Lua访问CSharp中可变参数方法
【代码】Unity-XLua(35)-Lua访问CSharp中可变参数方法。原创 2024-01-31 16:56:11 · 344 阅读 · 0 评论 -
Unity-XLua(34)-Lua访问CSharp重载方法
比如C#的int,float,double都对应于lua的number,上面的例子中 TestFunc如果有这些重载参数,第一行将无法区分开来,只能调用到其中一 个(生成代码中排前面的那个)。Xlua 支持方法的重载,但为“有限重载”。xlua只一定程度上支持重载函数的调用,因为lua的类型远远不如C#丰富,存在一对多的情况,将分别访问整数参数的TestFunc和字符串参数的TestFunc。原创 2024-01-31 16:55:31 · 384 阅读 · 0 评论 -
Unity-XLua(33)-Lua访问CSharp父类构造函数和方法
lua中使用冒号,表示成员方法的调用。它自动完成把当前对象作为一 个参数,传入方法。lua中使用点,则表示静态属性与方法调用。它需要手工往方法中传递 当前对象。原创 2024-01-31 15:01:23 · 399 阅读 · 0 评论 -
Unity-XLua(32)-Lua调用Unity函数修改Text属性面板
如果需要经常访问的类,可以先用局部变量引用后访问,除了减少敲代 码的时间,还能提高性能。(即: lua写查找与得到组件等方式,推荐与C#中一样,尽量把查找与得。B: 所有C#相关的都放到CS下,包括构造函数,静态成员属性、方法。使用CS开头,实例化类。A: lua里头没有new关键字。到的组件进行缓存,节省系统开销。原创 2024-01-31 14:54:07 · 384 阅读 · 0 评论 -
Unity-XLua(31)-映射到LuaFunction
B: 如果lua实现的部分都以delegate和interface的方式提供,使用方 可以完全和xLua解耦: 由一个专门的模块负责xlua的初始化以及delegate、 interface的映射,然后把这些delegate和interface设置到要用到它们的地方。A: 访问lua全局数据,特别是table以及function,代价比较大,建议 尽量少做,比如在初始化时把要调用的lua function获取一次(映射到 delegate)后,保存下来,后续直接调用该delegate即可。原创 2024-01-31 14:53:33 · 355 阅读 · 0 评论 -
Unity-XLua(30)-映射到委托
C: 对于Unity与C#中的复杂类型API,必须加入Xlua的配置文件,经过生成代码后才能正确应用。例如:Action<int,int,int> 、 Func<int,int,int> 等。都支持,各种复杂类型,out,ref修饰的,甚至可以返回另外一个 delegate。从左往右映射到c#的输出参数,输出参数包括返回值,out参数,ref参数。B: 委托引用后,退出luaEnv前,需要释放委托引用,否则lua报错!这是建议的方式,性能好很多,而且类型安全。原创 2024-01-31 14:53:01 · 393 阅读 · 0 评论 -
Unity-XLua(29)-映射到LuaTable类
这种方式好处是不需要生成代码,但问题就是比较慢(即:效率低下), 比interface方式要慢一个数量级,比如没有类型检查。因为效率较低,所以不推荐常用,适合用在一些较为复杂且使用频率很 低的情况下,一般不推荐使用。原创 2024-01-31 14:52:30 · 327 阅读 · 0 评论 -
Unity-XLua(28)-ByValue映射到字典或列表
这是更轻量级的by value 方式,映射到Dictionary<>,List<>(适合用在 简单表)不想定义class或者interface的话,可以考虑用这个,前提table下 key和value的类型都是一致的。原创 2024-01-31 14:51:54 · 329 阅读 · 0 评论 -
Unity-XLua(27)-映射到接口
这种方式依赖于生成代码(如果没生成代码会抛InvalidCastException异 常),代码生成器会生成这个interface的实例。如果get一个属性,生成代码会get对应的table字段,如果set属性也会设置对应的字段。甚至可以通过 interface的方法访问lua的函数。A: 接口需要添加特性标签[CSharpCallLua],否则无法生成实例代码。B: 为引用拷贝,适合用在复杂表,一般商业项目推荐使用本方式。原创 2024-01-31 14:51:16 · 399 阅读 · 0 评论 -
Unity-XLua(26)-映射到普通Class
要注意的是,这个过程是值拷贝,如果class比较复杂代价会比较大(即:较消耗性能)。而且修改class的字段值不会同步到table,反过来也不会。此种方式可以通过把类型加到GCPotimize 生成减低开销。定义一个class,有对应于table的字段的public属性,而且有无参数构造函数即可,比如对于{f1 = 100, f2 = 100}可以定义一个包含。这种方式下xLua会帮你new一个实例,并把对应的字段赋值过去。table的属性可以多于或者少于class的属性。可以嵌套其它复杂类型。原创 2024-01-31 14:50:40 · 344 阅读 · 0 评论 -
Unity-XLua(25)-获取全局基本数据类型
访问LuaEnv.Global就可以了,上面有个模版Get方法,可指定返回的类型。原创 2024-01-31 14:50:03 · 339 阅读 · 0 评论 -
Unity-XLua(24)-Unity中访问Lua下的HelloWorld
在xLua加自定义loader是很简单的,只涉及到一个接口://回调方法解释:通过AddLoader可以注册个回调,该回调参数是字符串,lua代码里头调 用require时,参数将会自动传给回调,回调中就可以根据这个参数去加载指 定文件,如果需要支持调试,需要把filepath修改为真实路径传出。原创 2024-01-31 14:27:02 · 369 阅读 · 0 评论 -
Unity-XLua(23)-Lua中的异常处理
【代码】Unity-XLua(23)-Lua中的异常处理。原创 2024-01-31 14:26:27 · 500 阅读 · 0 评论 -
Unity-XLua(22)-C#中的异常处理
【代码】Unity-XLua(22)-C#中的异常处理。原创 2024-01-31 14:25:29 · 318 阅读 · 0 评论 -
Unity-XLua(21)-Unity中的携程
null -表示暂缓一帧,在下一帧接着往下处理,也可以写成yield return 0或者yield return 1,然而,yield return num的写法其实后面的数字是不起作用的,不管为多少,表示都是在下一帧接着处理。yield就像是一个红绿灯,在满足紧跟在它后面的条件之前,这个协程会挂起,把执行权交给调用它的父函数,满足条件时就可以执行yield下面的代码。Another coroutine - 等待其他的协同,在这种情况下,新的协同程序将在这个Yield恢复之前完成)原创 2024-01-31 14:24:54 · 481 阅读 · 0 评论 -
Unity-XLua(20)-Lua中的携程
【代码】Unity-XLua(20)-Lua中的携程。原创 2024-01-31 14:24:13 · 397 阅读 · 0 评论 -
Unity-XLua(19)-Lua中的文件IO
【代码】Unity-XLua(19)-Lua中的文件IO。原创 2024-01-31 14:23:42 · 376 阅读 · 0 评论 -
Unity-XLua(18)-XML序列化与反序列化
【代码】Unity-XLua(18)-XML序列化与反序列化。原创 2024-01-31 11:51:29 · 375 阅读 · 0 评论 -
Unity-XLua(17)-二进制序列化与反序列化
反序列化:在需要时根据保存在文件中的数据得到原来对象的精确副本。序列化:把程序中对象的相关数据保存到文件中去。1.以某种存储形式使自定义对象持久化。2.将对象从一个地方传递到另一个地方。原创 2024-01-31 11:50:35 · 351 阅读 · 0 评论 -
Unity-XLua(16)-文件的读取与写入
【代码】Unity-XLua(16)-文件的读取与写入。原创 2024-01-30 11:16:01 · 385 阅读 · 0 评论 -
Unity-XLua(15)-数据流写入与读取
【代码】Unity-XLua(15)-数据流写入与读取。原创 2024-01-30 11:15:28 · 368 阅读 · 0 评论 -
Unity-XLua(14)-Path类与DriveInfo类
【代码】Unity-XLua(14)-Path类与DriveInfo类。原创 2024-01-30 11:14:56 · 376 阅读 · 0 评论 -
Unity-XLua(13)-FileInfo类与DirectoryInfo类
【代码】Unity-XLua(13)-FileInfo类与DirectoryInfo类。原创 2024-01-30 11:12:43 · 380 阅读 · 0 评论 -
Unity-XLua(12)-File类
【代码】Unity-XLua(12)-File类。原创 2024-01-30 11:10:01 · 281 阅读 · 0 评论 -
Unity-XLua(11)-文件IO与FileInfo类
System.IO命名空间由IO相关的类,结构,委托和枚举组成。这些类可用于将数据读取和写入文件或数据流。它还包含用于文件和目录支持的类。原创 2024-01-30 11:09:19 · 361 阅读 · 0 评论 -
Unity-XLua(10)-泛型约束
【代码】Unity-XLua(10)-泛型约束。原创 2024-01-29 19:51:13 · 376 阅读 · 0 评论 -
Unity-XLua(9)-系统内置委托
Comparison委托类型对象指向的方法必须有两个同类型的参数,该方法对两个同类型的参数进行比较并返回结果,返回值为int型。 如果Func关键字后的尖括号中给出多个类型,则最后一个类型为委托对象指向的方法的返回值类型。 Predicate委托类型对象指向的的方法返回值类型为固定的Bool类型。 Action委托类型对象指向的方法可以有参数,最多可以有16个参数。 Action委托类型对象指向的方法可以没有参数。 Func委托类型对象指向的的方法必须有返回值。原创 2024-01-29 11:55:17 · 383 阅读 · 0 评论 -
Unity-XLua(8)-委托的多播
使用委托的这个有用的特点,您可以创建一个委托被调用时要调用的方法的调用列表。这被称为委托的多播,也叫组播。委托对象可使用 “+” 运算符进行合并。一个合并委托调用它所合并的两个委托。只有相同类型的委托可被合并。“-” 运算符可用于从合并的委托中移除组件委托。原创 2024-01-29 11:54:45 · 384 阅读 · 0 评论 -
Unity-XLua(7)-委托的定义
C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。原创 2024-01-29 11:54:10 · 404 阅读 · 0 评论 -
Unity-XLua(6)-Lua中的OOP
【代码】Unity-XLua(6)-Lua中的OOP。原创 2024-01-28 19:31:23 · 393 阅读 · 0 评论 -
Unity-XLua(5)-接口
接口是方法的抽象,如果同样的方法成员在不同的类里面都会出现,可使用接口给出方法成员的声明。关键字声明,它与类的声明类似。接口声明默认是 public 的。原创 2024-01-28 19:17:50 · 341 阅读 · 0 评论 -
Unity-XLua(4)-密封类与密封方法
类时一个要求使用反射进行快速搜索的属性。密封属性可提高反射在检索属性时的性能。 类继承多个虚成员,并且密封每个成员的开发和测试开销明显大于密封整个类。C#中使用密封类时,如果满足如下条件,则应将其密封。 类包含带有安全敏感信息的继承的手保护成员。C#中声明密封类时需要使用。原创 2024-01-28 18:56:51 · 358 阅读 · 0 评论 -
Unity-XLua(3)-抽象类与抽象方法
1.抽象类中的成员可以是抽象成员,也可以是非抽象成员。2.一个抽象类可以包含抽象和非抽象方法,当一个类继承于抽象类,那么这个派生类必须实现所有的的基类抽象方法。6.一个抽象类也能从一个接口来实现,这种情况,我们必须为所有的方法提供方法体,这些方法是来自接口。4.通过声明派生类也为抽象,我们可以避免所有或特定的虚方法的实现,这就是抽象类的部分实现。5.一个抽象类能够继承另一个非抽象类,继承了基类的方法,添加新的抽象和非抽象方法是可行的。3.抽象方法只存在于抽象类的定义中,非抽象类中不能包含抽象方法。原创 2024-01-28 18:51:10 · 372 阅读 · 0 评论 -
Unity-XLua(2)-OOP多态
多态性可以是静态的或动态的。在静态多态性中,函数的响应是在编译时发生的。在动态多态性中,函数的响应是在运行时发生的。多态性意味着有多重形式。在面向对象编程范式中,多态性往往表现为"一个接口,多个功能"。多态是同一个行为具有多个不同表现形式或形态的能力。原创 2024-01-27 11:36:41 · 366 阅读 · 0 评论 -
Unity-XLua(1)-OOP继承与派生
当创建一个类时,程序员不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基类,这个新的类被称为派生类。原创 2024-01-26 17:14:44 · 428 阅读 · 0 评论 -
Unity-XLua-总结
Unity- XLua(1)——OOP继承与派生Unity- XLua(2)——OOP多态Unity- XLua(3)——抽象类与抽象方法Unity- XLua(4)——密封类与密封方法Unity- XLua(5)——接口Unity- XLua(6)——Lua中的OOPUnity- XLua(7)——委托的定义Unity- XLua(8)——委托的多播Unity- XLua(9)——系统内置委托Unity- XLua(10)——泛型约束Unity- XLua(11)——文件IO与FileInfo类Unity原创 2024-01-26 17:10:47 · 359 阅读 · 0 评论 -
XLua-FrameWork-Senser
原创 2024-01-26 08:47:47 · 305 阅读 · 0 评论