Tolua中的变量怎么去使用和赋值,在案例场景ToLua/Examples/04_AccessingLuaVariables中可以去学习;本章我们就分析下具体使用方式,首先先看一下提供的示范代码。

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);}
}

首先第一步初始化lua脚本:

    new LuaResLoader();LuaState lua = new LuaState();lua.Start();lua["Objs2Spawn"] = 5; //对脚本中Objs2Spawn变量进行赋值。lua.DoString(script);

在初始化时可以直接获取变量对lua脚本中变量赋值。

第二步访问变量:

    //通过LuaState访问Debugger.Log("Read var from lua: {0}", lua["var2read"]);Debugger.Log("Read table var from lua: {0}", lua["varTable.default"]);  //LuaState 拆串式table

第三步调用脚本方法

    LuaFunction func = lua["TestFunc"] as LuaFunction;func.Call();func.Dispose();

第四步读取的内容转为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";  //varTable.map.name 变量改变//改变后打印varTable.map.name 变量Debugger.Log("Modify varTable name: {0}", table["map.name"]);//table  添加新的luaTable table.AddTable("newmap");LuaTable table1 = (LuaTable)table["newmap"]; //新的luaTable 表加入字段(变量)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]);}

ToLua 入门05_AccessingLuaVariables相关推荐

  1. Lua快速入门篇(基础概述)(Yanlz+toLua+xLua)

    <Lua热更新> ##<Lua热更新>发布说明: ++++"Lua热更新"开始了,立钻哥哥终于开始此部分的探索了. ++++作为游戏发布迭代的重要技术:Lu ...

  2. gridcontrol值为0时设置为空_XASSET 4.0入门指南

    XASSET 5.1已经发布 XASSET 5.1为Unity项目提供了可以快速投入到生产环境中使用的具有更智能和灵活的资源分包.热更新机制和稳健高效的资源加载和内存管理的资源管理方案.它不仅可以服务 ...

  3. Unity(入门、中级、中高级、高级)

    Unity Unity 入门 1.Unity的安装与激活 1.1.中国版与国际版 中国版 https://unity.cn/ 国际版 https://unity.com/ 1.2.Unity下载 ht ...

  4. unity 3d网络游戏实战(全).pdf_“游戏开发入门指南——Unity+”的食用指南

    虽然专栏的文章已在置顶中按内容分好类了([置顶]游戏开发入门指南专栏目录),但不排除仍然有初学者面对繁杂的内容感觉无从下手.因此额外带来一篇食用指南,旨在给想要通过本专栏学习游戏开发的同学一条相对容易 ...

  5. 【游戏开发实战】Unity老工程师开始搞Laya了,不想看官方文档,那就看我的教程吧(Laya2.12.0版本 | 案例 | 入门 | 教程)

    文章目录 一.前言 二.我做的Laya案例集合工程 三.LayaAir IDE下载 四.Hello World工程 1.新建空项目 2.新建场景:HelloWorld.scene 3.创建一个Labe ...

  6. “游戏开发入门指南——Unity+”的食用指南

    "游戏开发入门指南--Unity+"的食用指南 虽然专栏的文章已在置顶中按内容分好类了([置顶]游戏开发入门指南专栏目录),但不排除仍然有初学者面对繁杂的内容感觉无从下手.因此额外 ...

  7. 极速入门ILRuntime热更新

    极速入门ILRuntime热更新 关于我们 1.认识ILRuntime 2.建立第一个ILRuntime程序 3.ILRuntime源码分析 4.深入ILRuntime热更新原理 5.深入ILRunt ...

  8. Lua语言基础入门 (Lua学习一)

    Lua语言快速入门 这篇博客主要是简单的讲解一下Lua的基础知识,涉及的东西不是很深,提供一些学习的思路,对具体的技术不展开介绍,网上资料很多写的都比我好,仅仅为了使用Lua,而不是做基于Lua的项目 ...

  9. 用Construct 2制作入门小游戏~

    今天在软导课上了解到了Construct 2这个神器,本零基础菜鸟决定尝试做一个简单的小游戏(实际上是入门的教程啊= = 首先呢,肯定是到官网下载软件啊,点击我下载~ 等安装完毕后我便按照新手教程开始 ...

最新文章

  1. 赛思互动:企业开展CRM系统需求调研步骤
  2. 【Android NDK 开发】在 C 代码中获取 Android 系统信息 ( NDK 项目创建 | NDK 配置 | 获取 Android 系统版本号 )
  3. 第4章 最基础的分类算法-k近邻算法
  4. js 时间戳转为日期格式
  5. zabbix2.4域用户配置
  6. jquery mobile用代码弹出dialog
  7. 6本书,读懂2022年最火的边缘计算
  8. 5月30日任务 访问日志不记录静态文件、访问日志切割、静态元素过期时间
  9. python的notebook怎么用_如何通过命令行将IPython Notebook转换为Python文件?
  10. Linux指令:top
  11. 电动牙刷C语言程序,电动牙刷的日常维护
  12. python 工程结构加固_gb50367 2013免费下载|混凝土结构加固设计规范GB50367-2013pdf高清电子版免费下载-东坡下载...
  13. 新手小白做短视频自媒体,入门级教程分享,抓紧收藏
  14. 玩qq游戏提示计算机内存不足,电脑游戏提示内存不足怎么办
  15. CMD 隐藏窗口运行
  16. 什么是动态编程Python示例
  17. numpy常用公式收集
  18. (150)FPGA面试题-Verilog实现2的幂次方乘法运算
  19. 高等数学笔记-乐经良老师-第五章-积分(Ⅱ)-定积分的应用-第六节-定积分的应用
  20. Linux正则表达式和文本处理工具(gred、awk、sed)

热门文章

  1. 大数据小项目之电视收视率企业项目05
  2. ZZNUOJ_C语言1039:n个数求和(完整代码)
  3. 【论文阅读】Stroke Controllable Fast Style Transfer with Adaptive Receptive Fields
  4. usart hmi(串口屏)介绍
  5. crt链接linux后不能输入退格,SecureCRT 退格键等不好用
  6. 谈谈亲历的WMS、MES与ERP的集成之路
  7. 极简时钟,记录时间的利器
  8. NOI2017退役记
  9. Android Room数据库使用
  10. 369、Java中级24 -【Spring】 2020.08.26