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?
18
Respuestas:
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/
fuente
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.
fuente
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.
fuente
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.
fuente
El intérprete de Lua no está administrado, AFAIK, por lo que no puede hacer que funcione en Xbox con XNA
Puede usar un intérprete de Javascript llamado Jint que no depende de DLR y funciona en Xbox ( http://jint.codeplex.com/ )
fuente
Técnicamente no responde su pregunta (no funciona en xbox), pero LuaInterface permite la integración de Lua con C # de manera relativamente sencilla.
fuente
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.
fuente