xlua学习笔记

xlua学习笔记

💡 原文中文,约4000字,阅读约需10分钟。
📝

内容提要

本文介绍了在LuaEnv中加载和执行Lua脚本的方法,包括使用DoString、加载文件和自定义Loader。建议使用单一LuaEnv,通过require加载主脚本。同时讨论了C#与Lua的交互,包括访问全局变量、映射类和接口、使用字典和列表,以及Lua调用C#的方法和参数处理规则。

🎯

关键要点

  • 使用LuaEnv中的DoString方法来执行Lua脚本,建议一个游戏只创建一个LuaEnv。
  • 通过文件执行Lua代码时,可以使用TextAsset加载Lua文件。
  • 推荐的加载Lua脚本方式是通过DoString('require 'main''),在main.lua中加载其他脚本。
  • C#访问Lua全局变量需要先加载Lua脚本,然后通过LuaEnv.Global.Get获取变量。
  • C#访问Lua table时,接口必须是public修饰,且映射的属性可以多于或少于class的属性。
  • 映射到Dictionary和List时,要求table下的key和value类型一致,且这种方法较轻量级。
  • C#访问Lua全局函数建议使用delegate映射,性能更好且类型安全。
  • Lua调用C#时,读写静态属性和调用静态方法的方式有所不同。
  • Lua调用C#的参数处理规则与返回值处理规则需要注意,特别是ref和out参数的处理。
  • 枚举值可以通过__CastFrom方法实现从整数或字符串到枚举值的转换。

延伸问答

如何在LuaEnv中执行Lua脚本?

可以使用LuaEnv中的DoString方法来执行Lua脚本,建议一个游戏只创建一个LuaEnv。

C#如何访问Lua中的全局变量?

C#访问Lua全局变量需要先加载Lua脚本,然后通过LuaEnv.Global.Get获取变量。

在C#中如何映射Lua的table?

C#访问Lua table时,接口必须是public修饰,且映射的属性可以多于或少于class的属性。

使用delegate映射C#全局函数有什么优势?

使用delegate映射C#全局函数性能更好且类型安全,支持带返回值和多返回值。

Lua调用C#时参数处理规则是什么?

Lua调用侧的参数处理规则中,C#的普通参数算一个输入形参,ref修饰的算一个输入形参,out不算。

如何在Lua中加载和执行多个脚本?

推荐的方式是通过DoString('require 'main''),在main.lua中加载其他脚本。

➡️

继续阅读