码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 使用自定义lua解析管理器调用lua脚本中的table


    合集 - Unity学习笔记(19)
    1.Unity学习笔记--基础2023-11-012.Unity学习笔记--入门2023-10-293.Unity学习笔记--数据持久化之PlayerPrefs的使用2023-11-194.Unity学习笔记--数据持久化XML文件(1)2023-11-205.Unity学习笔记--数据持久化XML文件(2)2023-12-016.Unity学习笔记--数据持久化Json2023-12-037.NGUI学习笔记(1)03-018.NGUI学习笔记203-039.NGUI学习笔记3.503-0510.NGUI学习笔记4.003-0611.Unity 热更--AssetBundle学习笔记 0.705-0112.Unity 热更--AssetBundle学习笔记 0.805-0213.Unity 热更--AssetBundle学习笔记 1.0【AB包资源加载工具类的实现】05-0314.[2]自定义Lua解析方式05-0615.Unity热更学习toLua使用--[1]toLua的导入和默认加载执行lua脚本05-0716.自定义Lua解析器管理器-------演化脚本V0.505-0817.使用自定义委托来调用Lua中的多返回值和长参数类型函数05-09
    18.使用自定义lua解析管理器调用lua脚本中的table05-10
    19.Lua热更学习--使用toLua中的协程05-12
    收起

    [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 luaDictionary = luaTable.ToDictTable();
    Debug.Log("dictionary[true] = " + luaDictionary[true]);
    //通过迭代器遍历
    IEnumerator> 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中更改数值其原数值也会改变。

  • 相关阅读:
    国庆day5
    方法的重写(override / overwrite)
    Vue快速入门
    2022年陕西省职称申报最全指南
    c++ 信奥编程 1129:统计数字字符个数
    R语言绘制热图
    ShareX使用说明——优秀的录屏软件
    年薪20W和100W的项目经理,差别在哪?
    Linux系统编程·进程概念引入
    mapboxgl 渲染热力图并动态更新
  • 原文地址:https://www.cnblogs.com/TonyCode/p/18185278
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号