热更新_ToLua学习示例 03_CallLuaFunction

文章介绍了如何在C#中使用Lua脚本,通过LuaState对象获取Lua函数,如lua.GetFunction(),然后执行这些函数,包括直接调用、转化为委托调用以及通过lua.Invoke()方法调用。同时展示了函数的参数和返回值类型处理。
摘要由CSDN通过智能技术生成
    {
     //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状态进行执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值