Rik*_*iki 6 c# scripting delegates
我正在写一个粒子系统.(对于游戏和粒子编辑器)在这个系统中有一个0到n的修饰符.它们每帧都会修改粒子系统中的粒子.
例如,你可以有一个名为"GravityModifier"的预定义修饰符,它只对每帧的每个粒子执行以下操作:"particle.Velocity.Y + = 9.81"或类似的东西.
现在我希望用户能够在运行时(在编辑器中)编写其他修饰符.我希望能够只使用C#.由于粒子系统是写入JSON文件的,因此自定义修饰符脚本应该作为源代码(可能是base64编码)写入文件.
-
我的问题是:假设游戏想要加载这样一个粒子系统文件.如何将自定义修饰符编译为可执行代码?
回答这个问题时要考虑的另一个非常重要的事情:请注意,这将是游戏的粒子系统.编译的代码每帧调用超过3000次.(大多数是60fps)因此,编译代码执行的时间比其他游戏功能要长得多,这一点非常重要.将修饰符脚本编译成表单的委托会很好:委托void ModifyParticle(ref Particle p);
这可能吗?如果是这样,怎么样?
有一个'Roslyn'C#编译器的CTP 作为服务API,您可以在其中执行在运行时定义的C#代码,例如REPL等.这是一篇涵盖它的MSDN文章
http://visualstudiomagazine.com/articles/2011 /11/16/the-roslyn-scripting-api.aspx
Mono在他们的Mono.CSharp库中已经有一段时间使用此功能,因此可以用作替代方案.