当前位置: 首页 > news >正文

toLua[五] Examples 04_AccessingLuaVariables分析

一.运行工程

本例展示如何用C#访问Lua变量,运行表现很简单,打印几行文本

二.代码分析

2.1代码展示

using UnityEngine;
using System.Collections.Generic;
using LuaInterface;public class AccessingLuaVariables : MonoBehaviour 
{private string script =@"print('Objs2Spawn is: '..Objs2Spawn)var2read = 42varTable = {1,2,3,4,5}varTable.default = 1varTable.map = {}varTable.map.name = 'map'meta = {name = 'meta'}setmetatable(varTable, meta)function TestFunc(strs)print('get func by variable')end";void Start () {
#if UNITY_5 || UNITY_2017 || UNITY_2018Application.logMessageReceived += ShowTips;
#elseApplication.RegisterLogCallback(ShowTips);
#endifnew LuaResLoader();LuaState lua = new LuaState();lua.Start();lua["Objs2Spawn"] = 5;lua.DoString(script);//通过LuaState访问Debugger.Log("Read var from lua: {0}", lua["var2read"]);Debugger.Log("Read table var from lua: {0}", lua["varTable.default"]);  //LuaState 拆串式tableLuaFunction 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";  //table 字符串只能是keyDebugger.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();}private void OnApplicationQuit(){
#if UNITY_5 || UNITY_2017 || UNITY_2018Application.logMessageReceived -= ShowTips;
#elseApplication.RegisterLogCallback(null);
#endif}string tips = null;void ShowTips(string msg, string stackTrace, LogType type){tips += msg;tips += "\r\n";}void OnGUI(){GUI.Label(new Rect(Screen.width / 2 - 300, Screen.height / 2 - 200, 600, 400), tips);}
}

2.2 ToLua 部分API用法

下面给出README(LuaFramework\ToLua\Examples\README.md)文档中的解释

* luaState["Objs2Spawn"] LuaState通过重载this操作符,访问lua _G表中的变量Objs2Spawn <br>

* LuaState.GetTable 从lua中获取一个lua table, 可以串式访问比如lua.GetTable("varTable.map.name") 等于 varTable->map->name<br>

* LuaTable 支持this操作符,但此this不支持串式访问。比如table["map.name"] "map.name" 只是一个key,不是table->map->name <br>

* LuaTable.GetMetaTable() 可以获取当前table的metatable <br>

* LuaTable.ToArray() 获取数组表中的所有对象存入到object[]表中 <br>

* LuaTable.AddTable(name) 在当前的table表中添加一个名字为name的表 <br>

* LuaTable.GetTable(key) 获取t[key]值到c#, 类似于 lua_gettable <br>

* LuaTable.SetTable(key, value) 等价于t[k] = v的操作, 类似于lua_settable <br>

* LuaTable.RawGet(key) 获取t[key]值到c#, 类似于 lua_rawget <br>

* LuaTable.RawSet(key, value) 等价于t[k] = v的操作, 类似于lua_rawset <br>

三.C#访问Lua变量小结

3.1 访问非table变量

num1 = 15
Debug.Log(lua["num1"]);

3.2 用key访问table

table1 = {value1 = 2025}
Debug.Log(lua["table1.value1"]);

3.3 访问嵌套table

table1 = {table2 = {value2 = 100}}
LuaTable table2 = lua.GetTable("table1.table2");
Debug.Log(table2["value2"]);

3.4 遍历数组

table1 = {1,2,3,4,5}
    LuaTable table1 = lua.GetTable("table1");object[] list = table1.ToArray();for (int i = 0; i < list.Length; i++){Debugger.Log("table1[{0}], is {1}", i, list[i]);}

http://www.dtcms.com/a/434222.html

相关文章:

  • 云原生时代的数据流高速公路:深入解剖Apache Pulsar的架构设计哲学
  • 在鸿蒙NEXT中使用WebSocket实现实时网络通信
  • Prometheus+Grafana轻松实现SpringBoot应用监控
  • 山东省住房建设厅网站58同城网站的建设目标是什么
  • 【金仓数据库】ksql 指南(一) 连接本地 KingbaseES 数据库与基础交互
  • SpringCloudGateway:像城市交通指挥中心一样的API网关
  • Kafka 安全SASL 认证全栈实战从 JAAS 到 Kerberos、PLAIN、SCRAM、OAUTH 与委托令牌
  • 设计公司网站图wordpress壁纸
  • 早厦门构网站建设湖州网站建设服务
  • 企业网站建设网站优化linux类似wordpress
  • 保险微网站制作wordpress 插件安装在哪个文件夹
  • 网站模板 自适应新手小白怎么开网店
  • 的广州建网站的公司自己做网站需要做啥
  • 苏州怎么制作网页网站站群网站程序
  • 凡科网站后台登陆wordpress 防止被黑
  • 内部劵网站怎么做门户网站建设关系到
  • 什么牛网站建设河南网站推广优化公司
  • 邢台做移动网站多少钱网站后台如何做产品展示
  • 互联网网站建设新闻wordpress中文购物主题
  • 做网站帮外国人淘宝呼叫中心
  • 电商网站开发的引言营销策划有限公司经营范围
  • 网站备案流程及资料青岛高级网站建设服务
  • 重庆最有效的网站推广企业官网用什么cms系统
  • 青岛网站建设q.479185700強部门网站建设多少钱
  • 制作一个网站的成本莆田seo
  • 思帽西宁网站建设html公司网页
  • 黄冈网站建设流程网页版抖音入口官网
  • 利用大平台做网站网页设计模板图片花简单
  • 怎么给网站做404界面便民网站开发
  • 网站如何做rss订阅南京企业做网站