最新文章
大小端详解
07-01 16:01
游戏业洗牌下的程序员心声:还在加班么?赚够钱了么?
07-01 15:58
游戏关卡的玩法规划设计思路
06-28 14:38
七个角度总结国内外游戏公司的理念差别
06-28 14:36
在Unity中使用单元测试让你的代码更稳固
06-28 14:33
运营实战分析:游戏运营该如何优雅地背锅
06-27 17:47
【分享】C#中执行lua代码,以及将c#注册进lua的全局方法
作者:三石 原文链接:http://www.taidous.com/forum.php?mod=viewthread&tid=32765&_dsign=9799db16
在使用C#与Lua交互之前,需要引用luainterface.dll和luanet.dll。下面将详细介绍如何将C#方法注册为Lua的全局方法、在C#中执行Lua代码和脚本,以及实现C#与Lua的相互调用。
一、将C#方法注册为Lua的全局方法
在C#中,可以将类的普通方法和静态方法注册为Lua的全局方法,这样在Lua代码中就可以直接调用这些方法。以下是示例代码:
using System;
using LuaInterface;
class Program
{
static void Main(string[] args)
{
// 创建Lua实例
Lua lua = new Lua();
// 创建Program类的实例
Program obj = new Program();
// 把一个类中的普通方法注册到Lua中
lua.RegisterFunction("NormalMethod", obj, obj.GetType().GetMethod("NormalMethod"));
// 在Lua中调用注册的普通方法
lua.DoString("NormalMethod()");
// 把一个类中的静态方法注册到Lua中
lua.RegisterFunction("MyStaticMethod", null, typeof(Program).GetMethod("MyStaticMethod"));
// 在Lua中调用注册的静态方法
lua.DoString("MyStaticMethod()");
Console.ReadLine();
}
// 普通方法
public void NormalMethod()
{
Console.WriteLine("wahaha");
}
// 静态方法
public static void MyStaticMethod()
{
Console.WriteLine("static");
}
}
在上述代码中,首先创建了一个Lua实例,然后分别将NormalMethod普通方法和MyStaticMethod静态方法注册到Lua中,并在Lua代码中调用这些方法。
二、在C#中执行Lua代码和脚本
1. 执行Lua代码
可以在C#中直接执行Lua代码,示例如下:
using System;
using LuaInterface;
class Program
{
static void Main()
{
// 创建Lua实例
Lua lua = new Lua();
// 在C#中执行Lua代码,定义变量
lua.DoString("num=2");
lua.DoString("name='YDL'");
lua.DoString("flag=true");
// 执行Lua代码并返回结果
object[] values = lua.DoString("return num,name,flag");
// 遍历返回的结果并输出
foreach (object obj in values)
{
Console.WriteLine(obj);
}
// 保持控制台窗口打开
Console.ReadLine();
}
}
在这段代码中,通过DoString方法在C#中执行Lua代码,定义了几个变量,并获取这些变量的值进行输出。
2. 执行Lua脚本
除了执行Lua代码,还可以执行Lua脚本文件。以下是示例代码:
using System;
using LuaInterface;
class Program
{
static void Main()
{
// 创建Lua实例
Lua lua = new Lua();
// 在C#中执行Lua脚本
lua.DoFile("helloword.lua");
// 保持控制台窗口打开
Console.ReadLine();
}
}
对应的helloword.lua脚本内容如下:
print("hello!")
在C#代码中,使用DoFile方法执行指定的Lua脚本文件。
三、C#中执行Lua脚本,Lua脚本调用C#中的方法
1. Lua脚本代码
require "luanet"
-- 加载指定的程序集,testLuainterface是命名空间
luanet.load_assembly("testLuainterface")
-- 导入C#中的类型
Program = luanet.import_type("testLuainterface.Program")
-- 创建Program类的实例
program1 = Program()
-- 调用C#方法并获取返回值
s = program1:TestOut("ydl")
-- 输出返回值
print(s)
2. C#代码
using System;
using LuaInterface;
namespace testLuainterface
{
class Program
{
static void Main(string[] args)
{
// 创建Lua实例
Lua lua = new Lua();
// 执行Lua脚本
lua.DoFile("helloword.lua");
// 保持控制台窗口打开
Console.ReadLine();
}
// 供Lua调用的方法
public int TestOut(string name)
{
return name.Length;
}
}
}
在这个示例中,Lua脚本通过luanet库加载C#程序集,并导入Program类,然后创建实例并调用TestOut方法,最后输出返回值。C#代码则负责执行该Lua脚本。
以上内容是从siki老师的热更新课程中学到的,希望对大家在C#与Lua交互方面有所帮助。