我想知道是否有可能在Microsoft XNA中嵌入Ruby作为脚本语言,最好的方法是什么。我在找像Xnua一样的东西,除了Ruby。
我偶然发现了Ruby.NET和IronRuby,它们似乎都处于非常早期的阶段,所以我不确定它们的可用性。此外,我不确定它们是否适用于Xbox 360。例如,XNA论坛上的这个主题说IronPython不起作用。
IronRuby和IronPython不能在Xbox 360上工作,因为它们基于DLR(动态语言运行时),并且DLR大量使用System.Reflection.Emit类型,而这些类型目前在Xbox 360.Net Framework(Compact.Net Framework的修改版)上不可用。
至于最好的方法,不幸的是,这取决于你比赛的剩余时间。使IronRuby脚本能够在XNA程序的上下文中进行评估的工作相当容易,例如,查看这篇博客文章。除此之外,你还想在脚本中公开一些有趣的对象,这完全取决于游戏代码/设计的其余部分。您可以查看Unity的脚本文档,了解要公开的类型和命令。
IronRuby几乎可以保证不会在Xbox上运行,但如果你只想为Windows开发XNA游戏,那么你应该能够以与任何其他应用程序相同的方式使用它。
我真的不能告诉你你会怎么做,只是这应该是可能的。
虽然我同意Leaf Garland的观察结果,但让我为您提供一个替代方案:
游戏的"首选"脚本语言是Lua。例如,游戏《水晶与孤岛惊魂》广泛使用LUA。浏览维基百科,查看使用它的著名游戏列表。
关于将其与XNA一起使用,自从我刚开始开发XNA爱好以来,我只触及了表面,但我知道的是,你不能直接在XNA中使用LUA。这是因为LUA是在C++(非托管)中构建的,因此您将无法将其部署到XBOX360中。
有一个正在开发的项目正在构建一个XNA版本的luahttp://www.xnua.com/.它也是一个免费的产品,源代码也可以下载。
如果游戏行业认为LUA对于AAA级商业游戏来说已经足够好了,我个人也会遵循这个方向(因为他们在这方面的经验比我丰富得多)
为什么不将Ruby用于PC开发,将Lua用于360?
编辑:也许这会有用。
虽然它不是Ruby,而且这是一个老问题,但我想让您了解我一直在构建的一个新脚本引擎。它将基本上在任何有.Net框架的地方运行,包括在XNA下的Xbox360上。它不使用Reflection.Emit,所以它在其他语言不使用的地方工作。它也是完全托管的代码,所以没有像Lua那样的P/Invoke。
你可以从我的博客中获得更多信息,并可以在这个演示页面上试用
它几乎已经准备好进行beta测试,但经过beta测试后,它将成为一个商业许可的组件