我应该使用什么方法进行C#脚本编写

时间:2011-11-18 21:52:27

标签: c# scripting delegates

我正在写一个粒子系统。 (对于游戏和粒子编辑器) 在该系统中,存在0到n个修饰符。 它们每帧都会修改粒子系统中的粒子。

例如,你可以有一个名为“GravityModifier”的预定义修饰符,它只对每帧的每个粒子执行以下操作:“particle.Velocity.Y + = 9.81”或类似的东西。

现在我希望用户能够在运行时(在编辑器中)编写其他修饰符。 我希望能够只使用C#。 由于粒子系统是写入JSON文件的,因此自定义修饰符脚本应该作为源代码(可能是base64编码)写入文件。

-

我的问题是: 假设游戏想要加载这样的粒子系统文件。如何将自定义修饰符编译为可执行代码?

回答这个问题时要考虑的另一个非常重要的事情:请注意,这将是游戏的粒子系统。编译的代码每帧调用超过3000次。 (大多数是60fps) 因此,编译代码执行所需的时间比其他游戏功能要长得非常重要。 将修饰符脚本编译到表单的委托中会很好:     委托void ModifyParticle(ref Particle p);

这可能吗?如果是这样,怎么样?

5 个答案:

答案 0 :(得分:6)

'Roslyn' C# compiler as a service API的CTP,您可以在其中执行在运行时定义的C#代码,例如REPL等。这是一篇涵盖它的MSDN文章
http://visualstudiomagazine.com/articles/2011/11/16/the-roslyn-scripting-api.aspx

Mono在Mono.CSharp library中已经有一段时间使用此功能,因此可以作为替代方案使用。

答案 1 :(得分:5)

是的,

使用CSScript library可以很简单。

答案 2 :(得分:2)

查看Roslyn,这是下一个.NET Framework中C#编译器即服务功能即将推出(但仍处于早期测试版)的预览。

答案 3 :(得分:0)

Lua呢?请参阅here Lua是一种非常简单的脚本语言,非常适合脚本中的游戏操作。相当多的iPhone游戏在objective-c中使用Lua,并且有很多人通过.Net使用Lua。

答案 4 :(得分:0)

使用.NET中的Microsoft内置编译器CSharpCodeProvider

如何使用C#编译器以编程方式编译代码:

  

.NET Framework公开允许您以编程方式进行的类   访问C#语言编译器。如果您愿意,这可能很有用   编写自己的代码编译实用程序。本文提供了示例   使您能够从文本源编译代码的代码。该   应用程序允许您只是构建可执行文件或构建   可执行文件并运行它。在期间发生的任何错误   编译过程显示在表格上。

http://support.microsoft.com/kb/304655

只需在开始游戏时编译并加载二进制文件。

有关如何编译dll并直接加载/执行它的更多示例,请参阅 http://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider.aspx 及其社区增加了内容。