我有一些背景lua代码,我在每次启动时都加载它们,它们运行良好,但是有什么方法可以将它们转换为C#呢?
这是我的元表代码:
player = {}
player.__index = player
function player:Add(name)
return setmetatable({name = name}, player)
end
function player:Nick()
return self.name
end它工作得很好,下面是我当前代码的工作方式:
print(ply:Nick())目前,我在注册lua函数代码时使用Player.cs对象搜索一个空值,在我的C#代码中没有任何包含Player对象的特殊的void或函数,但是我想将它们全部更改为Player对象,还有什么方法可以不用注册就使用Player.cs空/字符串或lua中的任何东西吗?Player.cs对象是非静态的.
发布于 2013-10-23 18:21:07
我发现KopiLua和LuaInterface (最新的)都有元对象,您只需要返回对象,您不能返回类或者无论如何都不能将它们添加到LuaInterface中,但是您可以返回可以这样做的对象或函数。从lua,人们可以使用对象函数。带有参数(甚至为空的)的函数与a :一起使用,而其他函数则使用点。下面是一个例子:
// C#:
public List<string> testing()
{
return new List<string>()
{
{"Test"},
{"Another test"}
};
}
// Player object:
public int Health { get { return 1; } }
public int Hp() { return this.Health; }
// lua:
testing:Clear()
print(ply.Health)
print(ply:Hp())
ply.Health = 2
// You can not change a function style value like Hp(), So no way to change health this way except making a set function发布于 2013-09-27 09:21:52
我不知道你到底需要什么,但让我试试。我将为我的LUA类设置一个标识符(如'csid‘= "Player"),我可以使用它从C#中检索的'LuaTable’对象中识别要实例化的对象。然后,您可以让您的C#类有一个工厂方法,使用“LuaTable”来构建实例,并在实例上使用允许从它获取“LuaTable”的方法。或者为每个C#类设置一个LUA包装类,其中包含“ToLUA”和“FromLUA”方法,以实现这两种方法的转换。
每当使用‘C#’调用某些LuaTable代码时,您都会检查它是否具有'csid‘成员,如果有,可以使用开关语句来选择类,或者使用带有检索到的名称的反射来构建C#对象。当您需要将一个C#对象传递给LUA时,您将以相同的方式使用相反的转换方法。
一个完全通用但并不理想的解决方案是,当您从LUA读取所有内容,然后加载它时,可以从C#生成一个dll。但是,只有当你的C#代码是完全通用的,并且不需要知道LUA使用的是“播放器”或“汽车”或其他任何东西时,这才是有用的。
https://stackoverflow.com/questions/18692931
复制相似问题