UH2S3L5——全局变量获取

本章代码关键字

1
luaState[]        //C#可以通过tolua解析器的索引器传入全局变量名来调用全局变量

调用Lua全局变量

想要在C#中获取全局变量需要调用toLua解析器,使用[]​传入全局变量名来调用全局变量

和xLua一样,我们在C#中只调用Lua的Main脚本,剩下的Lua脚本调用在Lua的Main脚本里执行

和xLua一样,我们无法调用C#的Lua的局部变量

Main.lua

1
2
3
print("第一个Lua脚本执行!")
-- 通过启动main时来执行脚本
require("CSharpCallLua/Test")

Test.lua

1
2
3
4
5
6
7
8
9
print("C#调用Lua的测试脚本")

-- 全局变量
testNumber = 1
testBool = true
testFloat = 1.2
testString = "123"

local testLocal = 10

获取全局变量

想要在C#中获取全局变量需要调用toLua解析器,使用索引器[]​传入全局变量名来获取全局变量

1
2
3
4
5
6
LuaManager.Instance.Init();
LuaManager.Instance.Require("Main");
print("testNumber: " + LuaManager.Instance.LuaState["testNumber"]);
print("testBool: " + LuaManager.Instance.LuaState["testBool"]);
print("testFloat: " + LuaManager.Instance.LuaState["testFloat"]);
print("testString: " + LuaManager.Instance.LuaState["testString"]);

image

修改全局变量

修改Lua的全局变量只需要在luaState​的索引器[]​传入全局变量名后为其赋值即可

1
2
LuaManager.Instance.LuaState["testNumber"] = 99;
print("testNumber: " + LuaManager.Instance.LuaState["testNumber"]);

image

值得一提的是,使用luaState[]​为变量赋值是值拷贝,为新的变量赋值不能影响原来的lua中的全局变量的值

1
2
3
int value = Convert.ToInt32(LuaManager.Instance.LuaState["testNumber"]);
value = 99;
print("testNumber: " + LuaManager.Instance.LuaState["testNumber"]);

image

添加全局变量

在C#里也可以为Lua的_G​表添加值,也就是添加全局变量,只需要通过luaState​的索引器为一个不存在的全局变量赋值即可

1
2
3
print("addValue: " + LuaManager.Instance.LuaState["addValue"]);
LuaManager.Instance.LuaState["addValue"] = 999;
print("addValue: " + LuaManager.Instance.LuaState["addValue"]);

image