是否有任何与C#一起用于PC和XBox 360开发的Lua API?[关闭]


18

我正在阅读一本有关游戏开发的书,其中向您展示了如何在Lua中为您的游戏编写脚本。他们对Lua进行编程并从C ++中使用它,但是我想知道是否存在使用C#中的Lua的库或API:特别是从XNA来为PC XBox 360 开发游戏?


5
一种小巧的选择,但它是Lua(名称),而不是LUA(首字母缩写,那个或您在大喊)
RCIX

在Lua的“关于”页面上:“ Lua不仅用于扩展用C和C ++编写的程序,而且还用于扩展... C#...编写的程序”。Google的“ C#中的lua”的第一个结果是GameDev.net(gamedev.net/reference/articles/article2275.asp)上的一篇有趣的文章,标题是将Lua与C#一起使用。
reverbb 2010年

许多.net开发人员使用ironpython或ironruby进行脚本编写。
扯掉

Answers:


6

这是我要指出的(http://www.xnua.com/xna_lua_xnua),但是很长一段时间没有更新。

C#是很棒的语言,在某种意义上可以用作c#游戏中的脚本语言。Nick Gravelyn创建了一些有关切片引擎的不错的教程(http://blog.nickgravelyn.com/downloads/#tileengine),并使用了自定义脚本引擎来触发对话框。当他了解“ yield”关键字时,他也有一个基本示例:http : //blog.nickgravelyn.com/2010/02/the-magic-of-yield/


3
这里有一些好处。要考虑的一件事是,为什么用C#编写游戏时需要脚本语言?C ++引擎可以通过使用脚本语言来获得很多敏捷性,因为C ++通常需要很长时间才能编译。在这方面,C#非常敏捷。如果出于某种原因希望在运行时编译脚本,则可以始终使用CodeDom(或任何其他代码生成方法)在加载时编译CS文件,但这仅适用于PC。《游戏引擎工具集开发》一书中有一章对此进行了介绍
Cubed2D,2010年

^^ Game Engine Toolset开发是一本不错的书:)。现在有点过时了,但是概念仍然很扎实。.NET脚本语言绑定的问题在于,要在Xbox 360上运行,必须对其进行解释。没有System.Reflection.Emit,您将无法在代码生成方面做很多事情。我的印象是这些功能将在不久的将来出现在Xbox 360中,但是基于下面我的答复中的评论讨论,情况可能并非如此。因此,在Xbox 360脚本性能可能不会那么大:(。
迈克·斯特罗贝尔

@ Cubed2D:Lua是脚本游戏的一种行业标准,对于非专业的程序员来说也更容易理解。
RCIX

@Mike是您的权利,可以在360上编译或生成代码。如果要实现这一点,我将不支持360上的c#脚本,而只能将其作为pc工具集功能。只需调整vs项目,使其在360版本中包含scripts文件夹,而在PC版本中忽略它。@RCIX只是因为其他人都这样做了,并不意味着您应该这样做。如果您想使用Xna,它将带来更多麻烦,而不是其价值。在.net世界中,有更好的方法可以向非程序员公开可调整的参数,以尝试实现lua(我以为您对非程序员的评论
有何

@ Cubed2D:很好,但这确实取决于您的目标平台。如果您只为PC编写程序,则可以使用LuaInterface和本地lua dll,而不必编写实现。此外,关键是,由于它在游戏开发领域拥有如此众多的追随者,因此自然而然地开发出的功能使其适用于该环境。而且,我主要是通过Lua进行编程,我敢打赌很多人都这样做了,所以人们为什么要使用它是可以理解的。
RCIX'7

2

如果您正在寻找使用C#编写脚本的方法,一定要看看IronPython。它不仅是C#的python API,它实际上是一个完全独立的python实现,可以编译为与C#相同的CLR程序集(具有相同的性能),但可以作为脚本语言进行接口。由于编组的开销,用于C#的任何Lua包装器都会非常慢。


2

正如肖恩所说,IronPython值得一看。IronPython实际上是针对.NET的几种针对动态语言运行时(DLR)的动态语言实现之一。至少有一个旨在在DLR上实现Lua的开源项目(像这样),但是我不确定是否有任何实现接近完成。Lua的一组实现良好的DLR绑定应提供与IronPython和IronRuby相当的性能,并且比Lua包装器要快得多。为了进行比较,IronPython通常比CPython表现更好(有时明显更好)。

注:以下为ElementCy指出,DLR语言一般不支持在Xbox 360上但是,在DLR的“解释模式”。我不太清楚可以肯定地说,但是可能会使IronPython(或其他DLR语言实现)在解释模式下在Xbox 360上运行,尽管性能肯定会受到影响。可能值得向DLR团队中的某人询问他们是否知道这是可能的。如果没有,则Xbox 360 应该获得即将出现的Silverlight支持的Reflection.Emit支持。如果发生这种情况,我想在Xbox 360上启动DLR并运行就不会有问题。


4
IronPython的唯一问题是,它不会在xbox360上运行。如果您只想将其用于PC,那就很好。IronPyton大量使用System.Reflection.Emit,而Xbox的.net Framework上没有。
ElementCy 2010年

很好的一点。更新。
Mike Strobel,2010年

2
不要以为xbox很快就会得到Reflection.Emit,因为winPhone既具有xna又具有silverlight并且不支持该命名空间
Cubed2D 2010年

1
你可能是对的。WP7实际上并不运行Silverlight,而是运行“ .Silverlight Mobile Compact Framework”,它基于.NET CF而不是.NET。我相信Xbox 360也可以运行.NET CF而不是完整的.NET Framework,因此它最终可能会实现与WP7类似的实现。那好吧。
Mike Strobel

2

我能给你的最好的解决方案是只用C#编写脚本。您可以在定位Windows时在运行时对其进行编译,并在xbox之前进行编译。(作为dll)

那将是最简单的解决方案。您也可以使用VB.NET或任何.NET语言进行操作。(尽管不确定脚本的脚本)基本上,我是说要在自己的dll中包含脚本。您可以让它们在Windows上的运行时进行编译。(您是否真的希望他们在xbox 360上执行此操作?您无法在那里更新游戏,至少我不这么认为)

我能理解您的无奈,我也想使用Lua。

概括起来:1)在Windows上的运行时构建它; 2)在Xbox 360之前进行构建。

这就是我的建议。


1
  1. Lua解释器不受管理,是AFAIK,因此您无法使其在XNA的Xbox上运行

  2. 您可以使用名为Jint的Javascript解释器,该解释器不依赖DLR,并且可以在Xbox上运行http://jint.codeplex.com/


我会说第一点是不正确的,因为这里有一些链接包含Lua <-> C#。
共产党鸭子

您只能在Xbox上运行托管代码。Lua <-> C#桥是非托管代码,允许您从托管代码中调用Lua。除非MS将其包含在XNA或Xbox 360 OS中,否则您将无法在其中运行它。


0

为了更新这个问题,我花了最后一天进行了广泛的搜索,我发现使用UniLua(用于统一,纯C#实现)是在Xbox上获得Lua的最佳,最有效的选择。我将其剥离,取出了所有Unity材料,效果很好。

通过重载LuaState的[]运算符,我还添加了一些在LuaInterface中发现的功能,诸如此类。

CFWLua

我希望这是有用的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.