【问题标题】:Using Lua with C#/Mono在 C#/Mono 中使用 Lua
【发布时间】:2012-02-15 16:01:34
【问题描述】:

我正在使用 OpenTK 库在 C#/Mono 中编写电脑游戏。我想使用 Lua 为游戏编写脚本,所以对 C# 一无所知的人也可以编辑脚本、关卡等。但是,问题是,我找不到任何方法如何将 Lua 与 C#/Mono 一起使用.我发现了惊人的LuaInterface,但是it doesn't work on Mono。我已经尝试过了,它可以在 Windows 上运行,但它不能在 linux (Ubuntu) 上运行。用 linux 替代品替换 lua51.dll 并不简单。

我想问是否有任何合适的方式将 LuaInterface 与 Mono 一起使用(我没有找到 LuaInterface 的任何源代码来编辑和重建它;我还听说旧版本的 LuaInterface 可以在 Mono 上工作,但是我没有在任何地方找到它们可供下载),或者是否有任何其他适合 C#/Mono 的库,你以前使用过并且你知道它可以工作。我已经搜索了很长时间,但我没有找到任何东西,我不想花数周时间自己编写它。

我猜想使用 C# 而不是 Lua 来编写脚本是可能的,但我不太喜欢这个想法,虽然我不知道为什么。

【问题讨论】:

    标签: c# scripting mono lua


    【解决方案1】:

    您可以使用lua grammarthis answer 作为查找创建c# 代码的编译器生成器的方法。我认为这是支持外部语言支持的最好和最简单的方法。为什么?您可以为语法结构快速添加任何事件并添加您想要的任何语言扩展。

    【讨论】:

    • 从语法实现语言(甚至使用解析器生成器)比使用现有实现复杂得多,您只需声明函数和变量绑定即可完成。更不用说编写高效的编译器和 VM 是一项相当复杂的任务 - 这是您必须在使用解析器生成器创建的解析器之上构建自己的任务。
    • 描述方式的优势取决于项目规模和项目需求。而且我也觉得用这个技术解决问题也不是太难,可能需要几天的学习时间和半弱的开发时间。
    • 感谢您的想法,但我不会做这样复杂的事情。但我投了赞成票,因为这是一个可行的解决方案。 :)
    【解决方案2】:

    .Net(也包含在 Mono 中)中有一个名为 Dynamic Language Runtime 的功能。

    我不知道 Lua 是否受支持,但有 PythonRuby 的 DLR 实现 - 这两个都适用于 Mono 和 Microsoft CLR。​​

    查看this question 了解有关使用 C# 作为脚本语言的信息。

    编辑:其实有一个IronLua项目,但不知道它有多完整。

    【讨论】:

    • 我已为您的答案投了赞成票,但我不想使用 DLR,因为它使任何人都可以将您的应用程序用作病毒、间谍软件等的宿主。如果我使用 DLR , C# 和我让任何人编辑脚本并发布它们,然后任何人都可以使用系统库编写任何脚本(删除系统文件、杀死进程、卸载应用程序等)那么,是否可以使用 DLR,但仅限于访问一些图书馆?我希望你明白我的意思。
    • @TomsonTom 您可以将脚本托管在具有降低权限的 AppDomain 中。看到这个:msdn.microsoft.com/en-us/library/bb763046.aspx 和这个:stackoverflow.com/questions/1362757/…
    • 谢谢,我已接受您的回答,因为这似乎是我唯一的解决方案。 :)
    猜你喜欢
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    • 2019-02-18
    • 1970-01-01
    相关资源
    最近更新 更多