使用自定义lua解析管理器调用lua脚本中的table
1.Unity学习笔记--基础2.Unity学习笔记--入门3.Unity学习笔记--数据持久化之PlayerPrefs的使用4.Unity学习笔记--数据持久化XML文件(1)5.Unity学习笔记--数据持久化XML文件(2)6.Unity学习笔记--数据持久化Json7.NGUI学习笔记(1)8.NGUI学习笔记29.NGUI学习笔记3.510.NGUI学习笔记4.011.Unity 热更--AssetBundle学习笔记 0.712.Unity 热更--AssetBundle学习笔记 0.813.Unity 热更--AssetBundle学习笔记 1.0【AB包资源加载工具类的实现】14.[2]自定义Lua解析方式15.Unity热更学习toLua使用--[1]toLua的导入和默认加载执行lua脚本16.自定义Lua解析器管理器-------演化脚本V0.517.使用自定义委托来调用Lua中的多返回值和长参数类型函数
18.使用自定义lua解析管理器调用lua脚本中的table
19.Lua热更学习--使用toLua中的协程20.toLua中Lua调用C#中的类21.热更学习笔记10~11----lua调用C#中的List和Dictionary、拓展类中的方法22.Lua中调用ref和out修饰参数的函数/重载函数23.Unity 编辑器中获取选中的文件夹、文件路径[5] 使用自定义lua解析管理器调用table
访问数组类型的table
CallLuaEntrance测试脚本中内容:
//--------------------------------------访问table----------------------------- //4.1 访问list/数组类型的table //获取table LuaTable luaTable = CallLuaManager.Instance().LuaState.GetTable("arrayTable"); //直接访问 Debug.Log("luaTable[1] " + luaTable[1]); Debug.Log("luaTable[2] " + luaTable[2]); Debug.Log("luaTable[3] " + luaTable[3]); Debug.Log("luaTable[4] " + luaTable[4]); Debug.Log("luaTable[5] " + luaTable[5]); Debug.Log("luaTable[6] " + luaTable[6]); Debug.Log("luaTable[7] " + luaTable[7]); //转成array存储访问 Object[] array = luaTable.ToArray(); for (int i = 0; i < array.Length; i++) { Debug.Log("listTable遍历访问 " + array[i]); } //检测是否是深拷贝 //更改最后一个数值 luaTable[7] = 9999; Debug.Log("-------------->luaTable[7] " + luaTable[7]); //获取arrayTable2 luaTable = CallLuaManager.Instance().LuaState.GetTable("arrayTable2"); Object[] array2 = luaTable.ToArray(); for (int i = 0; i < array2.Length; i++) { Debug.Log("listTable遍历访问" + array2[i]); }
对应的lua内容:
--list/数组类型的table arrayTable = {2024,05,10,19,55,66,78} arrayTable2 = {"Hello","Lua",ture,123,88.88}
访问DIctionary类型的table
在C#脚本中使用LuaTable来接受获取到的Table,对于字典类型的Table调用LuaTable的ToDictTable方法转成对应类型的LuaDictTable
类型,获取字典的迭代器对字典进行迭代遍历。
CallLuaEntrance测试脚本中内容:
//4.2 字典类型的table数值获取 luaTable = CallLuaManager.Instance().LuaState.GetTable("dicTable1"); Debug.Log("luaTable[\"date\"] " + luaTable["date"]); Debug.Log("luaTable[\"name\"] " + luaTable["name"]); Debug.Log("luaTable[\"blog\"] " + luaTable["blog"]); Debug.Log("luaTable[\"WebBlog\"] " + luaTable["WebBlog"]); luaTable = CallLuaManager.Instance().LuaState.GetTable("dicTable2"); //转成LuaDictTable // 因为键值对 各自的类型不统一 因此使用object // 如果类型统一可以使用已知的 LuaDictTable<object, object> luaDictionary = luaTable.ToDictTable<Object, Object>(); Debug.Log("dictionary[true] = " + luaDictionary[true]); //通过迭代器遍历 IEnumerator<LuaDictEntry<object, object>> enumerable = luaDictionary.GetEnumerator(); while (enumerable.MoveNext()) { Debug.Log(enumerable.Current.Key + " , " + enumerable.Current.Value); }
访问的lua脚本中数据:
--Dictionary类型的table dicTable1 = { ["date"] = "2024/05/10", ["name"] = "TonyChang", ["blog"] = "TonyCode", ["WebBlog"] = "cnblogs", } dicTable2 = { [12] = 666, [true] = 1, [20.01] = "Yes!", ["tony"] = "geeks", }
最后总结一下:
在C#中调用lua中的Table和函数,就是先使用LuaState中方法获取到对应的函数或者table,之后根据获取的类型进行对应的解析访问。
一般我们调用一个具体的函数或者table时候,已经清楚其对应的类型,可以根据对应类型将table具体转换,之后访问使用。
此外发现,luaTable中的是浅拷贝(索引指向同一个数值),即在获取到的luaTable中更改数值其原数值也会改变。
本文作者:畅知
本文链接:https://www.cnblogs.com/TonyCode/p/18185278
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 我与微信审核的“相爱相杀”看个人小程序副业