ToLua的Example示例学习笔记03_CallLuaFun

2020-05-10  本文已影响0人  凌枫望星月

展示了C#如何调用Lua的函数。

1」代码

操作代码如下:

        private string script =
        @"  function luaFunc(num)                        
                return num + 1
            end

            test = {}
            test.luaFunc = luaFunc
        ";

    LuaFunction luaFunc = null;
    LuaState lua = null;
    
    void Start () 
    {
        new LuaResLoader();
        lua = new LuaState();
        lua.Start();
        DelegateFactory.Init();
        lua.DoString(script);

        //Get the function object
        luaFunc = lua.GetFunction("test.luaFunc");

        if (func != null)
        {
            int num = luaFunc.Invoke<int, int>(123456);
            Debugger.Log("generic call return: {0}", num);

            num = CallFunc();
            Debugger.Log("expansion call return: {0}", num);

            Func<int, int> Func = luaFunc.ToDelegate<Func<int, int>>();
            num = Func(123456);
            Debugger.Log("Delegate call return: {0}", num);
            
            num = lua.Invoke<int, int>("test.luaFunc", 123456, true);
            Debugger.Log("luastate call return: {0}", num);
        }
                
        lua.CheckTop();
    }

    void OnDestroy()
    {
        if (luaFunc != null)
        {
            luaFunc.Dispose();
            luaFunc = null;
        }

        lua.Dispose();
        lua = null;
    }

    int CallFunc()
    {        
        luaFunc.BeginPCall();                
        luaFunc.Push(123456);
        luaFunc.PCall();        
        int num = (int)luaFunc.CheckNumber();                    
        luaFunc.EndPCall();
        return num;                
    }

2」需要了解的部分


3」值得注意的方法




最后再多说几句,这个代码中的

        new LuaResLoader();
        lua = new LuaState();

new LuaResLoader();放在lua = new LuaState();之前,可能会有人想问它是做什么用的。
这个LuaResLoader实际上是继承了我们之前曾提到的LuaFileUtils,并重写和增加了一些函数,由于是单例模式,单例初始化由lua = new LuaState();完成,但是率先 new 一个 LuaResLoader(),就让单例是LuaResLoader()而不是new 一个 LuaFileUtils()。

上一篇 下一篇

猜你喜欢

热点阅读