UH2S2L10——表映射到LuaTable
本章代码关键字
1 2 3 4
| LuaTable luaTable.Get<>() luaTable.Set<>() luaTable.Dispose()
|
LuaTable
我们在C#脚本里调用Lua解析器的_G
表时,其实我们就是在对其返回的LuaTable
操作
同样的,我们可以用LuaTable
来获取Lua中的表
先在Lua脚本声明如下内容
1 2 3 4 5 6 7 8 9
| TestClass = { testInt = 2, testBool = true, testFloat = 1.2, testString = "123", testFun = function() print("123123123") end, }
|
再通过LuaTable
来获取Lua中的表
1 2 3 4 5 6 7 8 9
| LuaManager.Instance.Init(); LuaManager.Instance.DoLuaFile("Main");
LuaTable table = LuaManager.Instance.Global.Get<LuaTable>("TestClass"); Debug.Log(table.Get<int>("testInt")); Debug.Log(table.Get<bool>("testBool")); Debug.Log(table.Get<float>("testFloat")); Debug.Log(table.Get<string>("testString")); table.Get<LuaFunction>("testFun").Call();
|
使用LuaTable
映射表很方便,不需要我们去声明任何东西就可以使用
但是,官方并不推荐使用LuaTable
,原因与LuaFunction
一致,它们会产生垃圾,效率低
我们之前就可以对的_G
表的LuaTable
通过Set
方法来修改全局变量,
不难发现LuaTable
和接口映射一样是引用拷贝,即通过它修改表中的值会对Lua中的表产生影响
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| LuaManager.Instance.Init(); LuaManager.Instance.DoLuaFile("Main");
LuaTable table = LuaManager.Instance.Global.Get<LuaTable>("TestClass"); Debug.Log(table.Get<int>("testInt")); Debug.Log(table.Get<bool>("testBool")); Debug.Log(table.Get<float>("testFloat")); Debug.Log(table.Get<string>("testString")); table.Get<LuaFunction>("testFun").Call();
table.Set("testInt", 55); Debug.Log(table.Get<int>("testInt"));
LuaTable table2 = LuaManager.Instance.Global.Get<LuaTable>("TestClass"); Debug.Log(table2.Get<int>("testInt"));
|
LuaTable的销毁
当LuaTable
的调用完毕时,应当手动销毁,否则将一直占用内存,造成内存泄露,LuaFunction
同理
Lua解析器的tick()
就是会释放我们没有手动销毁的LuaTable
,LuaFunction
1 2
| table.Dispose(); table2.Dispose();
|