如何为游戏编译C#脚本

时间:2013-03-17 04:15:39

标签: c# dll scripting

我使用C#制作一个简单的游戏引擎(在VB 2008中,主要是为了我自己)。有一个主要的应用程序可以处理图形和内容,而实际游戏中的大部分数据都将使用我给游戏设计师提供的工具生成一个dll。

我听说过很多关于C#非常适合编写脚本的东西(并且看起来它比其他任何方式都更适合我的需求)但我无法真正找到答案。我遇到了这个问题:

我显然不想给出主exe的源代码,但它将包含脚本所需的所有主要方法(因为它们作用于主exe)。

如果没有它将在父exe中调用的方法的定义,怎么能生成一个dll?主exe将使用dll作为依赖使用它。这意味着dll不能依赖exe引起循环。

我可以创建exe和库都使用的另一个dll,但是那里的方法将无法直接在主exe上使用它。

我想出的唯一合乎逻辑的解决方案是:

  • 一个带有我所需类别的骨头的dll。
  • 包含游戏数据的dll。这将有一个继承自dll A。
  • 的类
  • Exe依赖于A和B.它将覆盖B中的A方法,使其表现得如此。

但这似乎并不太优雅。

在我厌倦了进一步阅读之前,我在研究中看到了很多单词(MAF,MEF,Roslyn等)。我一个人花了好几个小时。

在您看来,我应该怎么做呢?我有什么东西可以忽略吗?

2 个答案:

答案 0 :(得分:1)

我不知道你在哪里听到C#对于脚本来说是“伟大的”。 Rosyln半生不熟的尝试并非真正的“脚本”。

为什么不试试其中一种DLR语言 - 比如IronPython和IronRuby?

还有针对.NET的Lua绑定。现在大多数游戏开发人员都在Lua中编写脚本。因此,如果您计划保持封闭源代码,那么modder社区肯定会喜欢您的游戏引擎。

答案 1 :(得分:0)

听起来,您通过脚本,通过dll和可扩展性来混合可扩展性。

让我们先采用dll方法。

实现这一目标的标准方法与您所概述的非常接近:

  1. 拥有interfaces.dll
  2. 您的入口点dll将依赖于interfaces.dll
  3. 扩展dll将依赖于interfaces.dll
  4. 在运行时,要扩展main,请在interfaces.dll中扫描实现所需接口的类的entention dll,根据需要调用方法。
  5. 对于脚本编写,您通常希望使用脚本语言 - powershell在.Net中很受欢迎,并且还有some experiments with JavaScript