Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我应该使用什么方法编写C#脚本_C#_Scripting_Delegates - Fatal编程技术网

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

我应该使用什么方法编写C#脚本,c#,scripting,delegates,C#,Scripting,Delegates,我在写一个粒子系统。(用于游戏和粒子编辑器) 在这个系统中有一个0到n的修饰符。 每帧修改粒子系统中的粒子 例如,您可以使用一个名为“GravityModifier”的预定义修改器,该修改器每帧仅对每个粒子执行以下操作:“particle.Velocity.Y+=9.81”或类似的操作 现在,我希望用户能够在运行时(在编辑器中)编写额外的修饰符。 我希望能用C来做这个。 由于粒子系统是写入JSON文件的,因此自定义修改器脚本应该作为源代码(可能是base64编码)写入该文件 -- 我的问题是:

我在写一个粒子系统。(用于游戏和粒子编辑器) 在这个系统中有一个0到n的修饰符。 每帧修改粒子系统中的粒子

例如,您可以使用一个名为“GravityModifier”的预定义修改器,该修改器每帧仅对每个粒子执行以下操作:“particle.Velocity.Y+=9.81”或类似的操作

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

--

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

当回答这个问题时,要考虑另一个非常重要的事情:注意这将是一个游戏的粒子系统。编译后的代码每帧调用次数将超过3000次。(大多为60帧/秒) 因此,编译后的代码不会比其他游戏函数花费更长的执行时间,这一点非常重要。 最好将修改器脚本编译成以下形式的委托: 代理无效修改粒子(参考粒子p)

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

这是可能的,而且使用非常简单。

有一个的CTP,您可以在其中执行运行时定义的C#代码,例如REPL等。下面是一篇MSDN文章,介绍了它


Mono已经有了这一功能一段时间了,因此可以作为替代品使用。

请看,这是即将在下一个.NET框架中推出的C#compiler-as-a-service功能预览版(但测试版还很早)。

如何取而代之?See Lua是一种非常简单的脚本语言,非常适合编写游戏中的动作脚本。相当多的iPhone游戏在objective-c中使用Lua,也有很多游戏通过.Net使用Lua。

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

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

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

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

有关如何编译dll并直接加载/执行dll的更多示例,请访问
它的社区也增加了内容。

您也可以通过在上搜索此主题获得一些好主意。但是,我认为这对这个网站来说仍然是一个好问题。我认为有些商业游戏(第二人生)使用Mono作为脚本引擎:哇,谢谢。这正是我需要的!特别是LoadMethod(…)&GetStaticMethod()的示例,它可以按预期工作,并提供与执行“本机”静态方法相同的速度!这太完美了。