2011-11-18 9 views
6

Estoy escribiendo un sistema de partículas. (para un juego y un editor de partículas) En este sistema hay un 0 a n modificadores. Aquellos modifican las partículas en el sistema de partículas en cada cuadro.¿Qué enfoque debo usar para el script de C#?

Por ejemplo, podría tener un modificador predefinido llamado "GravityModifier" que solo hace lo siguiente para cada partícula de cada fotograma: "particle.Velocity.Y + = 9.81" o algo así.

Ahora quiero que el usuario pueda escribir modificadores adicionales en el tiempo de ejecución (en el editor). Me gustaría poder usar C# solo para esto. Y dado que los sistemas de partículas se escriben en archivos JSON, los scripts de modificación personalizados deben escribirse como código fuente (tal vez codificado en base64) en el archivo.

-

Mi pregunta es: Supongamos que el juego quiere cargar un archivo de sistema de este tipo de partículas. ¿Cómo compilo los modificadores personalizados en código ejecutable?

Otra cosa muy importante a considerar al responder a esta pregunta: Tenga en cuenta que este será un sistema de partículas para un juego. El código compilado será llamado más de 3000 veces en cada cuadro. (principalmente a 60 fps) Por lo tanto, es muy importante que el código compilado no tarde mucho más tiempo en ejecutarse que otras funciones del juego. Sería bueno tener los scripts de modificación compilados en los delegados de la forma: delegate void ModifyParticle (ref Particle p);

¿Esto es posible? ¿Si es así, cómo?

+0

También puede obtener algunas buenas ideas al buscar este tema en [gamedev] (http://gamedev.stackexchange.com/). Pero, creo que sigue siendo una buena pregunta para este sitio. – jadarnel27

+0

Creo que hay algunos juegos comerciales (Second Life) que usan Mono como motor de scripts: http://www.mono-project.com/Scripting_With_Mono –

Respuesta

5

Sí,

Esto es posible y muy sencilla utilizando el CSScript library.

+0

Wow gracias. Esto es exactamente lo que necesitaba! Específicamente, el ejemplo con LoadMethod (...) y GetStaticMethod() Funciona como se esperaba Y proporciona la misma velocidad que la ejecución de un método estático "nativo". Esto es perfecto. – riki

2

Echa un vistazo a Roslyn, es la próxima (pero aún muy temprana) versión preliminar de la característica del compilador como servicio de C# en el próximo .NET Framework.

0

¿Qué tal Lua en su lugar? Ver here Lua es un lenguaje de scripting fantásticamente simple e ideal para secuencias de comandos en acciones del juego. Muchos juegos de iPhone usan Lua en Object-C, y hay muchos que también usan Lua a través de .Net.

0

utiliza el incorporado en el compilador de Microsoft en .NET CSharpCodeProvider:

Cómo compilar programación de código usando compilador de C#:

El .NET Framework expone clases que le permiten programación acceso al C# compilador de lenguaje. Esto podría ser útil si desea escribir sus propias utilidades de compilación de código. Este artículo proporciona el código de muestra que le permite compilar el código de una fuente de texto.La aplicación le permite simplemente construir el ejecutable o compilar el ejecutable y ejecutarlo. Los errores que se producen durante el proceso de compilación se muestran en el formulario.

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

Simplemente compilar y cargar los archivos binarios cuando se inicia el juego.

Más ejemplos de cómo compilar dll y cargarlo/ejecutarlo directamente se pueden encontrar en http://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider.aspx y su comunidad agregó contenido.

+0

¿Cuidar para detallar el voto a la baja? – stefan

Cuestiones relacionadas