¿Hay alguna API de Lua que funcione con C # para PC y desarrollo de Xbox 360? [cerrado]

18

Estoy leyendo un libro sobre Desarrollo de juegos en el que te muestran cómo hacer scripts para tu juego en Lua. Programan Lua y lo usan desde C ++, pero me preguntaba si hay una biblioteca o API para usar Lua desde C #: ¿específicamente desde XNA para desarrollar juegos para PC y XBox 360?

alFador
fuente
55
Una especie de pequeño truco, pero es Lua (un nombre), no LUA (un acrónimo, eso o estás gritando)
RCIX
Desde la página "Acerca de" de Lua: "Lua se ha utilizado para extender programas escritos no solo en C y C ++, sino también en ... C # ...". El primer resultado de Google para "lua en C #" fue un artículo interesante de GameDev.net ( gamedev.net/reference/articles/article2275.asp ) titulado Uso de Lua con C #.
reverberación
Muchos desarrolladores de .net usan ironpython o ironruby para las secuencias de comandos.
Estafado el

Respuestas:

6

Aquí es donde te señalaría (http://www.xnua.com/xna_lua_xnua), pero no se ha actualizado durante mucho tiempo.

C # es un excelente lenguaje y, en cierto sentido, podría usarse como un lenguaje de script dentro de su juego de C # Nick Gravelyn ha creado algunos buenos tutoriales sobre el motor de mosaico (http://blog.nickgravelyn.com/downloads/#tileengine) y ha utilizado un motor de secuencias de comandos personalizado para activar el diálogo. También tiene un ejemplo básico cuando se enteró de la palabra clave "rendimiento": http://blog.nickgravelyn.com/2010/02/the-magic-of-yield/

ElementCy
fuente
3
Algunos buenos puntos aquí. Una cosa en la que pensar es por qué quieres un lenguaje de script cuando tu juego está escrito en c #. Los motores C ++ pueden ganar mucha agilidad al usar un lenguaje de scripting, ya que C ++ generalmente toma mucho tiempo compilar. C # es bastante rápido a este respecto. Si por alguna razón desea que sus scripts se compilen en tiempo de ejecución, siempre puede usar CodeDom (o cualquier otro método de generación de código) para compilar un archivo CS en el momento de la carga, pero esto solo funcionaría en la PC. Hay un capítulo sobre esto en el libro "Game Engine Toolset Development"
Cubed2D
^^ Game Engine Toolset Development es un buen libro :). Ahora está un poco desactualizado, pero los conceptos aún son sólidos. El problema con los enlaces del lenguaje de scripting .NET es que, para ejecutarse en la Xbox 360, tienen que ser interpretados. Sin System.Reflection.Emit, no se puede hacer mucho en la generación de código. Tenía la impresión de que estas capacidades llegarían a la Xbox 360 en un futuro próximo, pero según la discusión de comentarios en mi respuesta a continuación, probablemente este no sea el caso. Por lo tanto, el rendimiento del script en Xbox 360 probablemente no será tan bueno :(.
Mike Strobel
@ Cubed2D: Lua es una especie de estándar de la industria para los juegos de secuencias de comandos, y también es más fácil de entender para el programador no profesional.
RCIX
@Mi derecho, puede compilar o generar código en el 360. Si fuera a implementar esto, simplemente no admitiría scripts de C # en 360, y solo lo tendría como una función de conjunto de herramientas de PC. Simplemente modifique el proyecto vs para incluir la carpeta de scripts en una compilación 360 e ignore en una PC. @RCIX solo porque todos los demás lo hacen, no significa que debas hacerlo. Si quieres usar Xna, será más problemático de lo que vale. Hay mejores maneras de exponer los parámetros ajustables a los no programadores en el mundo .net que intentan implementar lua (lo que supongo es que estás llegando con tu comentario no pro programador)
Cubed2D
@ Cubed2D: Ese es un buen punto, pero realmente depende de su plataforma de destino. si está escribiendo solo para la PC, puede usar LuaInterface y el lua dll nativo, y no tiene que escribir una implementación. Además, el punto es que, dado que tiene tantos seguidores en el mundo del desarrollo de juegos, son características desarrolladas naturalmente que lo hacen bueno para ese entorno. Además, comencé mi programación principal a través de Lua, y apuesto a que muchas personas lo hicieron, por lo que es comprensible por qué la gente quiere usarlo.
RCIX
2

Si está buscando secuencias de comandos en C #, definitivamente eche un vistazo a IronPython . No es solo una API de Python para C #, en realidad es una implementación de Python completamente separada que se compila en el mismo ensamblado CLR (con el mismo rendimiento) que C #, pero puede interactuar como un lenguaje de secuencias de comandos. Cualquier envoltorio Lua para C # sería muy lento debido a la sobrecarga de Marshalling.

Sean Edwards
fuente
2

Como dijo Sean, vale la pena mirar IronPython. IronPython es en realidad una de las pocas implementaciones de lenguaje dinámico para .NET dirigido al Dynamic Language Runtime (DLR). Hay al menos un proyecto de código abierto destinado a implementar Lua en el DLR (como este ), pero no estoy seguro de si hay implementaciones cerca de completarse. Un conjunto bien implementado de enlaces DLR para Lua debería proporcionar un rendimiento a la par con IronPython y IronRuby, y sería mucho más rápido que un contenedor Lua. En aras de la comparación, IronPython generalmente funciona mejor que CPython (a veces significativamente mejor).

Nota: Como se indica a continuación ElementCy, idiomas DLR general, no se admite en la Xbox 360. Sin embargo, no es un "modo interpretado" en el DLR. No sé lo suficiente para decirlo con certeza, pero podría ser posible hacer que IronPython (u otras implementaciones de lenguaje DLR) se ejecuten en la Xbox 360 en modo interpretado, aunque el rendimiento ciertamente se vería afectado. Puede valer la pena preguntarle a alguien del equipo de DLR si sabe que esto es posible. De lo contrario, la Xbox 360 debería recibir soporte Reflection.Emit como parte del próximo soporte Silverlight. Si eso sucede, imagino que poner en funcionamiento el DLR en la Xbox 360 no será un problema.

Mike Strobel
fuente
44
El único problema con IronPython, no se ejecutará en xbox360. Está bien si quieres usarlo solo para PC. IronPyton usa System.Reflection.Emit mucho, y eso no está disponible en .NET Framework de Xbox.
ElementCy
Un muy buen punto. Actualizado.
Mike Strobel
2
No piense que Xbox está obteniendo Reflexión. Emita pronto, ya que winPhone tiene xna y Silverlight y no admite ese espacio de nombres
Cubed2D
1
Podrías estar en lo cierto. WP7 en realidad no ejecuta Silverlight, sino "Silverlight Mobile Compact Framework", que se basa en .NET CF en lugar de .NET. Creo que la Xbox 360 también ejecuta .NET CF en lugar del .NET Framework completo, por lo que es probable que termine con una implementación similar a la de WP7. Oh bien.
Mike Strobel
2

La mejor solución que podría darte es simplemente escribir en C #. Puede compilarlos en tiempo de ejecución cuando apunta a Windows y compilarlos de antemano para el xbox. (como un dll)

Esa sería la solución más fácil. También puede hacerlo en VB.NET o en cualquier lenguaje .NET. (aunque no estoy seguro acerca de los scripts) Básicamente, estoy diciendo que tenga sus scripts en su propio dll. Puede hacer que se compilen en tiempo de ejecución en Windows. (¿realmente quieres que hagan esto en xbox 360 ?, no puedes actualizar tus juegos allí, al menos no lo creo)

Puedo entender tu frustración, también quería usar Lua.

Para resumir: 1) Construirlo en tiempo de ejecución en Windows 2) Compilarlo de antemano para Xbox 360

Eso es lo que recomiendo.

Michael Coleman
fuente
1
  1. El intérprete de Lua no está administrado, AFAIK, por lo que no puede hacer que funcione en Xbox con XNA

  2. Puede usar un intérprete de Javascript llamado Jint que no depende de DLR y funciona en Xbox ( http://jint.codeplex.com/ )

wizzard0
fuente
Hubiera dicho que el primer punto es falso, ya que hay varios enlaces aquí que tienen Lua <-> C #.
El pato comunista
Solo puede ejecutar código administrado en Xbox. Un puente Lua <-> C # es un código no administrado que le permite llamar a Lua desde el código administrado; hasta que MS lo incluya en XNA o en el sistema operativo Xbox 360, no puede ejecutarlo allí.
0

Técnicamente no responde su pregunta (no funciona en xbox), pero LuaInterface permite la integración de Lua con C # de manera relativamente sencilla.

RCIX
fuente
0

Solo para actualizar esta pregunta, pasé el último día haciendo una búsqueda exhaustiva, y descubrí que usar UniLua (hecho para usar con unidad, implementación pura de C #) es la mejor y más efectiva opción para obtener Lua en Xbox. Lo desnudé, saqué todo el material de Unity y funciona muy bien.

También agregué algunas funcionalidades encontradas en LuaInterface al sobrecargar el operador [] para LuaState, y tal.

CFWLua

Espero que esto haya sido útil.

Bradley Galloway
fuente