通过LuaInterface完成Lua和C#之间的互相调用

来源:互联网 发布:福建广电网络集团官网 编辑:程序博客网 时间:2024/05/06 15:01
**LuaInterface**
通过LuaInterface完成Lua和C#之间的互相调用


①需要下载LuaInterface包:核心库:LuaInterface.dll和Luanet.dll
②在C#脚本中加入引用上面的核心库
③进行代码编写



1.在C#中执行访问Lua代码
Lua lua = new Lua(); //创建Lua解析器
          lua["num"] = 2;   //定义一个num
          lua["str"] = "string";   //定义一个字符串
          lua.newTable("tab");    //创建一个表  tab={}


2.取得lua环境中的变量


double num = (double)lua["num"];
string str = (string)lua["str"];


3.在C#中执行lua脚本文件或者脚本字符串


Lua lua = new Lua();


①在C#中执行lua脚本用lua.DoFile("MyLua.lua")(lua脚本文件名称)


**注意:lua脚本需与C#脚本在同一文件夹中,lua脚本的编码格式需要是ANSI编码格式


②在c#中对lua脚本进行修改用lua.DoString("num=2")(变量定义赋值) 
                 object[] values = lua.DoString("return num") (返回num的值存取在values中)



在热更新中,只需要写好解析lua脚本的代码,然后c#代码不需要变动,只需要修改lua脚本就好,通过lua脚本控制游戏逻辑。


4.把一个C#方法注册进Lua的一个全局方法


①把一个类的普通方法注册进lua


lua.RegisterFunction("NormalMethod",obj,obj.GetType().GetMethod("NormalMethod")); //注册
lua.DoString("NormalMethod()"); //调用方法


②把一个类的静态方法注册进lua


lua.RegisterFunction("StaticMethod",obj,typeof(ClassName).GetMethod("StaticMethod"));//注册
lua.DoString("StaticMethod()");  //调用方法


5.在Lua中使用C#中的类
require "luanet"  --引用LuaNet.dll
luanet.load_assembly("System")  --引用C#中的dll文件(命名空间!!)
Int32=luanet.import_type("System.Int32")  --引用dll中的类 (命名空间中的某个类名)
num = Int32.Parse("123")  --调用类中的方法
print(num)


6.在Lua中访问C#中的属性和方法
Lua代码中,访问C#对象的属性的方式和访问table的键索引一样,
比如obj.name 或者 obj["name"]


7.Lua代码中,访问C#对象的普通函数的方式和调用table的函数一样,

比如obj:method()


0 0