美文网首页unity面试题
Unity3D C#和Lua互相调用

Unity3D C#和Lua互相调用

作者: CodeVin | 来源:发表于2019-03-18 18:27 被阅读0次

    原理:c#调用lua, 是c# 通过P/Invoke方式调用了lua的dll(一个C库),然后这个dll执行了lua脚本。

    (P/Invoke的全称是Platform Invoke (平台调用) 它实际上是一种函数调用机制通 过P/Invoke我们就可以调用非托管DLL中的函数 )

    • Lua调用C#

    1. 将C#方法注册到Lua虚拟机中(LuaState.RegisterFunction)
    2. 在lua中就可以通过注册的方法名调用C#方法
    • C#调用Lua

    1. 在C#中加载lua文件(LuaState.DoFile)
    2. 拿到目标函数(LuaState.GetFunction)
    3. 调用目标函数(LuaFunction.Call)

    示例代码

    ///CSharpLuaTest.cs
    public class CSharpLuaTest : MonoBehaviour {
    
        private LuaState luaState = new LuaState(); // 创建lua虚拟机 
       
        void Start ()
        {
            // 在lua虚拟机(全局)中注册自定义函数
            this.luaState.RegisterFunction("CSharpMethod", this, this.GetType().GetMethod("CSharpMethod"));
    
            // 加载lua文件(绝对路径)  
            this.luaState.DoFile(Application.streamingAssetsPath + "/Test.lua");
    
            // 加载完文件后,使用GetFunction获取lua脚本中的函数,再调用Call执行。  
            object[] objs = luaState.GetFunction("LuaMethod").Call(999);        
            Debug.Log(string.Format("{0} - {1}" ,objs[0], objs[1]));
        }
    
        //自定义功能函数,将被注册到lua虚拟机中  
        public string CSharpMethod(int num)   
        {
            return string.Format("Hello World {0} !" , num+1);
        }
       
        void Update () {    
        }
    }
    
    ///Test.lua
    function LuaMethod(i)
      s = CSharpMethod(i); --调用C#方法
      return i,s;
    end
    

    参考:http://www.cnblogs.com/zhuweisky/p/6705095.html

    相关文章

      网友评论

        本文标题:Unity3D C#和Lua互相调用

        本文链接:https://www.haomeiwen.com/subject/rbvbmqtx.html