Lua与C#交互

来源:互联网 发布:苹果6s应用与数据设置 编辑:程序博客网 时间:2024/05/16 06:53

Lua与C#交互

//------------------------------------------------------------------------------// <summary>//     这是一个用以演示LuaInterface的简单程序,通过LuaInterface我们可以实现在C#与Lua的//     的相互通信。Lua是一个轻巧而高效的语言,它可以和任何语言混合使用。Lua语言最初并不是//     为游戏开发而诞生,却是因为游戏开发而成名。目前,在世界上有大量的游戏使用了Lua作为它//     的脚本语言。如图Unity使用了C#作为它的语言,Lua在游戏开发领域发挥着不可忽视的重要作//     用。使用LuaInterface的方法如下://     1.C#//     注册Lua中可调用方法://    mLua.RegisterFunction(Lua调用方法名, 类, 类.GetMethod(C#方法名));//    注:C#不要使用方法级泛型,即 void Fun<T>(string str);,如果使用,系统自动判定T为第一个参数的类型。//   加载Lua代码//   mLua.DoString(Lua代码);//    mLua.DoFile(Lua文件绝对路径);//     调用Lua方法//   mLua.GetFunction(Lua方法).Call(参数);  注:此处参数不要传递dynamic类型的类,否则Lua中无法获取属性值//     2.Lua//     调用C#方法时需要先注册注册后按照Lua方法处理// </summary>//------------------------------------------------------------------------------using System;using LuaInterface;namespace LuaExample{public class LuaScript{//定义LuaFile属性以便于从外部调用一个Lua脚本private string mLuaFile;public string LuaFile {get {return mLuaFile;}set {mLuaFile = value;}}//Lua虚拟机private Lua mLua;//构造函数public LuaScript (){//初始化Lua虚拟机mLua=new Lua();//注册Printf方法mLua.RegisterFunction("Printf",this,this.GetType().GetMethod("Printf"));}//定义一个C#方法供Lua使用public void Printf(string str){Console.WriteLine("This Method is Invoked by Lua:" + str);}//在C#中调用Lua方法public void DoFile(){if(mLuaFile!="")//执行Lua脚本中的代码mLua.DoFile(mLuaFile);}//在C#中调用Lau方法public void DoString(){//以字符串形式定义的Lua脚本string mFuncString="function Add(a,b) io.write(a+b) end";//在Lua中定义该方法mLua.DoString(mFuncString);//调用该方法mLua.GetFunction("Add").Call(4,8);}//在Lua中调用C#脚本public void Invoke(){//调用注册的Printf方法mLua.GetFunction("Printf").Call("Hello Lua");}}}

接下来我们编写一个主类来调用这个类:

using System;using LuaInterface;namespace LuaExample{class MainClass{public static void Main (string[] args){//实例化LuaSxriptLuaScript mLua=new LuaScript();//设置LuaFilemLua.LuaFile="D:\\test.lua";//调用字符串中定义的Lua方法mLua.DoString();//为美观考虑增加一个空行Console.WriteLine();//执行Lua文件中定义的脚本mLua.DoFile();//调用C#中定义的方法mLua.Invoke();}}}


转载请注明出处,本文作者:秦元培, 本文出处:http://blog.csdn.net/qinyuanpei/article/details/39910099

====================================================================================
结束。

0 0
原创粉丝点击