热更新_ToLua学习示例 03_CallLuaFunction

    {
     //Lua脚本 可使用前面两篇写的获取lua脚本
    private string script =
        @"  
            --函数
            function luaFunc(num)                        
                return num + 1
            end
            --声明表格
            test = {}
            --表格里面添加字段,值是一个函数 把上面的方法放到这个表里面去
            test.luaFunc = luaFunc
        ";
    //要获取的Lua方法对象
    LuaFunction luaFunc = null;
    //Lua状态对象
    LuaState lua = null;
    
        void Start () 
        {
        //实例化状态对象
        lua = new LuaState();
        //启动
        lua.Start();
        lua.DoString(script);
        //通过字符串从lua脚本里面获取到方法
        luaFunc = lua.GetFunction("test.luaFunc");
        if (luaFunc != null)
        {
            //格式 luaFunc.Invoke<参数类型,返回值类型>(参数);跟Func类型的委托yiyang
            int num = luaFunc.Invoke<int, int>(123456);
            Debugger.Log("generic call return: {0}", num);

            //2、原生执行步骤 具体请查看源码
            num = CallFunc();
            Debugger.Log("expansion call return: {0}", num);

            //3、用委托的方式将luaFunc转化成一个委托duixiang
                                    //将方法转化成一个委托
            Func<int, int> Func = luaFunc.ToDelegate<Func<int, int>>();
            //执行委托
            num = Func(123456);
            Debugger.Log("Delegate call return: {0}", num);
            
            //4、直接用luaState对象去执行函数
            //书写格式   参数类型 返回值  函数名称   参数    随便
            num = lua.Invoke<int, int>("test.luaFunc", 123456, true);
            Debugger.Log("luastate call return: {0}", num);
        }
        }
    }
    

脚本功能,获取并执行在lua脚本里面的函数方法

重点说明

函数获取

LuaFunction fun = lua.GetFunction("函数名字"); 通过函数的名字直接获取到函数

执行函数

fun .Invoke<参数数据类型, 返回值数据类型>(参数); 可有多个参数

Func<int, int> Func = fun.ToDelegate<Func<int, int>>();转化成委托再执行

lua.Invoke<int, int>("lua脚本里面的函数名字", 参数, true);直接用lua状态进行执行

猜你喜欢

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