热更新_ToLua学习示例 04_AccessingLuaVariables

{
private string script =
        @"
            --打印一个字段 这个字段没有进行赋值会在后面用脚本赋值
            print('Objs2Spawn is: '..Objs2Spawn)
            --声明一个字段并对这个字段进行赋值
            var2read = 42
            --声明一个表里面有数据
            varTable = {1,2,3,4,5}
            --给表里面加一个字段
            varTable.default = 1
            --给表里面加一个空表
            varTable.map = {}
            --给这个空表里面加上一个数据
            varTable.map.name = 'map'
            
            --元表
            meta = {name = 'meta'}
            --设置元表 
            setmetatable(varTable, meta)
            
            function TestFunc(strs)
                print('get func by variable')
            end
        ";
void Start () 
    {
     LuaState lua = new LuaState();
     ua.Start();
        //通过索引器直接对脚本里面的变量进行赋值
        lua["Objs2Spawn"] = 6666;
        //要先进行赋值再执行lua脚本不然Objs2Spawn为nil会报错
        lua.DoString(script);
                
        //通过LuaState访问
        //读取lua里面的字段名字
        Debugger.Log("Read var from lua: {0}", lua["var2read"]);
                
        //读取lua里面的表里面的数据 
        Debugger.Log("Read table var from lua: {0}", lua["varTable.default"]);
        //可以通过索引器的方法获取一个函数 转化成LuaFunction 要使用as强制数据类型转化
        LuaFunction func = lua["TestFunc"] as LuaFunction;
        
        //Call方法是执行函数 --适用于有参数,但无返回值 一定要是没有返回值的函数方法
        func.Call();
        func.Dispose();
        
        //获取lua脚本里面的一个表
        LuaTable table = lua.GetTable("varTable");
        //通过索引器的方式获取表里面的数据
        Debugger.Log("Read varTable from lua, default: {0} name: {1}", table["default"],                             
        table["map.name"]);
               
        //对lua中获取的表里面的数据进行重新赋值 用的都是索引方式进行赋值
        table["map.name"] = "new";  //table 字符串只能是key
        Debugger.Log("Modify varTable name: {0}", table["map.name"]);
        
        //给表里面添加一个新的表格 创建了一个叫newmap的表格
        table.AddTable("newmap");
        //获取上面添加到表格里面表格对象newmap
        LuaTable table1 = (LuaTable)table["newmap"];
        
        //在table1里面创建一个name的变量并进行赋值
        //此处的name不是元表meta里面的name meta是table的元表
        table1["name"] = "新建表格名字";
        Debugger.Log("varTable.newmap name: {0}", table1["name"]);

        //获取表table的元表
        table1 = table.GetMetaTable();
        if (table1 != null)
        {
            Debugger.Log("varTable metatable name: {0}", table1["name"]);
        }
        //把lua里面的table转化成一个数组
        object[] list = table.ToArray();

        for (int i = 0; i < list.Length; i++)
        {
            Debugger.Log("varTable[{0}], is {1}", i, list[i]);
        }
        
    }

}

脚本功能实现C#对Lua变量的赋值,同样获取到lua变量同样也能对C#变量赋值

主要函数

lua[“变量名称”] 直接获取到Lua里面的变量可查可改{get;set;;}

func.Call() 这个是执行有参数无返回值的函数

object[] list = table.ToArray(); 把表格里面的数据变成一个Array数组

会转化

1、没有设置key value键值对

2、没有设置特殊下标

的数据

猜你喜欢

转载自blog.csdn.net/m0_74652911/article/details/129908652