💡
原文中文,约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中加载其他脚本。
➡️