ToLua学习笔记(四) Example 04 AccessingLuaVariables
2016-07-06 12:33
316 查看
ToLua学习笔记(四) Example 04 AccessingLuaVariables
转载请注明出处四川包邮ToLua学习笔记四 Example 04 AccessingLuaVariables
代码
c传递给lua
通过LuaState访问
cache成LuaTable进行访问
直接获取一个Table然后就和c中用法一样即可
添加Table
获取数组
获取元表关于元表的用法请自行百度
最后一定要记得Dispose
顾名思义,Example 04将会告诉我们如何访问Lua代码中的变量
代码
using UnityEngine; using System.Collections.Generic; using LuaInterface; public class AccessingLuaVariables : MonoBehaviour { private string script = @" Objs2Spawn = 10 print('Objs2Spawn is: '..Objs2Spawn) var2read = 42 varTable = {1,2,3,4,5} varTable.default = 1 varTable.map = {} varTable.map.name = 'ma12p' meta = {name = 'meta'} setmetatable(varTable, meta) function TestFunc(strs) print('get func by variable') end "; void Start () { LuaState lua = new LuaState(); lua.Start(); // 在Lua中定义一个变量Objs2Spawn,同时赋值5 lua["Objs2Spawn"] = 5; lua.DoString(script); //通过LuaState访问 Debugger.Log("Read var from lua: {0}", lua["var2read"]); lua["var2read"] = 1; Debugger.Log("Read var from lua: {0}", lua["var2read"]); Debugger.Log("Read table var from lua: {0}", lua["varTable.default"]); // 测试获取map.name Debugger.Log("Get varTable.map.name: {0}", lua["varTable.map.name"]); LuaFunction func = lua["TestFunc"] as LuaFunction; func.Call(); func.Dispose(); //cache成LuaTable进行访问 LuaTable table = lua.GetTable("varTable"); Debugger.Log("Read varTable from lua, default: {0} name: {1}", table["default"], table["map.name"]); table["map.name"] = "new"; Debugger.Log("Modify varTable name: {0}", table["map.name"]); // 添加表 table.AddTable("newmap"); LuaTable table1 = (LuaTable)table["newmap"]; table1["name"] = "table1"; Debugger.Log("varTable.newmap name: {0}", table1["name"]); table1.Dispose(); // 获取元表 table1 = table.GetMetaTable(); if (table1 != null) { Debugger.Log("varTable metatable name: {0}", table1["name"]); } // 获取数组 object[] list = table.ToArray(); for (int i = 0; i < list.Length; i++) { Debugger.Log("varTable[{0}], is {1}", i, list[i]); } table.Dispose(); lua.CheckTop(); lua.Dispose(); } }
c#传递给lua
-lua代码 -..lua中的字符串连接变量 print('Objs2Spawn is: '..Objs2Spawn)
// c#代码 LuaState lua = new LuaState(); lua.Start(); // 在Lua中定义一个变量Objs2Spawn,同时赋值5 lua["Objs2Spawn"] = 5; lua.DoString(script);
执行后的结果会打印出
[string “LuaState.DoString”]:2: Objs2Spawn is: 5
如果我们在lua中添加一句
Objs2Spawn = 10
会怎么样??
答案就是会打印出
[string “LuaState.DoString”]:2: Objs2Spawn is: 10
原因是我们在执行c#语句DoString(script);前传递给lua中的值5已经被lua代码中的Objs2Spawn = 10重新赋值了.
通过LuaState访问
Debugger.Log("Read var from lua: {0}", lua["var2read"]); // 重新赋值 lua["var2read"] = 1; Debugger.Log("Read var from lua: {0}", lua["var2read"]); Debugger.Log("Read table var from lua: {0}", lua["varTable.default"]);
直接和我们的Dictionary或者Table用法一样
cache成LuaTable进行访问
直接获取一个Table然后就和c#中用法一样即可.
LuaTable table = lua.GetTable("varTable"); Debugger.Log("Read varTable from lua, default: {0} name: {1}", table["default"], table["map.name"]); table["map.name"] = "new"; Debugger.Log("Modify varTable name: {0}", table["map.name"]);
添加Table
table.AddTable("newmap"); LuaTable table1 = (LuaTable)table["newmap"]; table1["name"] = "table1"; Debugger.Log("varTable.newmap name: {0}", table1["name"]); table1.Dispose();
获取数组
想要获取varTable = {1,2,3,4,5}
直接使用
object[] list = table.ToArray();即可
获取元表(关于元表的用法请自行百度)
table.GetMetaTable();
最后一定要记得Dispose.
相关文章推荐
- c#调用COM组件
- C#实现把指定数据写入串口
- C#动态创建button的方法
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#实现给图片加水印的方法
- C#使用加边法计算行列式的值
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#中的delegate委托类型基本学习教程
- C#实现子窗体与父窗体通信方法实例总结
- C#通用邮件发送类分享
- 详解Lua中的表的概念及其相关操作方法
- 举例讲解C#中自动实现的属性
- C#中this的用法集锦
- C#数据结构之顺序表(SeqList)实例详解
- C#.NET获取拨号连接的宽带连接方法
- C#异步绑定数据实现方法
- C#实现AddRange为数组添加多个元素的方法
- C#中Equality和Identity浅析