Las historias de fantasmas y casas encantadas se narran desde los albores de la Humanidad, y en el mundo del videojuego están presentes desde títulos tan conocidos como Pac-Man (1980) o Haunted House (1982). Algo interesante de estos seres espectrales es que suelen ser inmunes a nuestros ataques, haciendo que el jugador se concentre en huir o esconderse de ellos en lugar de pelear.
Esa casa no debe ser habitada. Nadie ha podido vivir en ella, no quiere que la habite nadie.
Al final de la escalera – Peter Medak (1980)
En torno a este tema vamos a desarrollar un prototipo centrado en modelar la toma de decisiones de los distintos fantasmas, móviles e inmóviles, que custodian todos los rincones de una mansión espectral como del infortunado sujeto que se ha visto atrapado allí y trata de escapar con vida.
Este prototipo sirve para poner en práctica las dos herramientas de toma de decisiones más populares en la actualidad: tanto las máquinas de estado (para los fantasmas móviles) como los árboles de comportamiento (para controlar al protagonista de la historia). Además se recurrirá a la búsqueda de caminos mediante mallas de navegación, comportamientos de dirección y hasta gestión sensorial, pero esta vez aprovechando todo lo posible las herramientas que Unity trae integradas.
Propuesta
La práctica consiste en desarrollar un prototipo de IA para Videojuegos, dentro de un entorno virtual que representa una mansión encantada con gárgolas inmóviles pero vigilantes e irritables fantasmas patrulleros. En él tenemos a un agente inteligente (John Lemon) capaz de percibir, moverse, navegar y decidir para tratar de alcanzar la salida de la mansión, recorriendo sus diferentes estancias y usando unas extrañas estatuillas de colores para «desactivar» la amenaza que suponen las gárgolas que bloquean su camino. También hay otros agentes más simples (los fantasmas móviles) que patrullan, aunque pueden dar giros sobre sí mismos y cambiar de sentido si encuentran sospechosas estatuillas en mitad de su ruta.
El punto de partida propuesto para esta práctica, con la documentación e implementación (código y recursos audiovisuales) necesaria, se encuentra en este repositorio de GitHub: Ghost – Base.
En el entorno virtual encontramos varias estancias, siendo estos los elementos más relevantes que podemos encontrar en ellas:
- John Lemon. El atribulado hombre-limón que protagoniza esta historia. Comienza aleatoriamente en uno de los puntos iniciales de la casa y debe alcanzar la salida de la mansión en el menor tiempo posible y siendo cazado el menor número de veces. Únicamente se puede mover, aunque con su movimiento puede empujar estatuillas de colores que se encuentran repartidas por el escenario.
- Gárgolas. Son espectros inmóviles de color verde, rojo o azul que siempre vigilan una misma zona de la casa. Atraparán automáticamente a John Lemon si osa cruzar dicha zona. La única manera de acabar con este bloqueo es poniéndoles delante una estatuilla de su mismo color.
- Estatuillas. Son objetos extraños, también de color verde, rojo o azul, que por alguna razón destruyen a aquella temible gárgola del mismo color que se lo encuentre en su campo de visión.
- Fantasmas. Son espíritus móviles que se dedican a patrullar por un recorrido predeterminado la casa, normalmente de tipo lineal o circular. Si detectan al jugador lo atraparán automáticamente… pero si detectan una estatuilla entrarán en modo sospecha, investigan un poco y retoman su patrulla aunque en sentido inverso.
- Final del juego. Es la zona del escenario que John Lemon debe alcanzar para escapar de la mansión y anotarse una partida ganada.
Las características principales del prototipo son:
A. Hay un mundo virtual (la mansión espectral) con un esquema de división de malla de navegación proporcionado por Unity, donde se ubican las estancias y todos los elementos descritos anteriormente. La cámara principal está preparada para seguir al protagonista desde el comienzo. Hay más puntos representativos al escenario (waypoints) de los que vienen en el punto de partida y hallamos otras funciones como teclas que permiten hacer zoom para obtener una vista general del entorno, reiniciar todos los contadores o salir de la aplicación.
B. Las estatuillas de colores están repartidas por el escenario. La posición inicial puede cambiar ligeramente (de manera aleatoria) en cada partida y también hay cierto «rebote» en las paredes para que sea difícil que una estatuilla quede atascada en una esquina y no podamos empujarla.
C. Las gárgolas son estáticas y no cambian de posición, pero los fantasmas sí son espectros móviles y su posición inicial puede variar ligera y aleatoriamente. Se mueven patrullando una ruta predefinida, que puede ser lineal (idea y vuelta) o circular. Si detectan una estatuilla con su cápsula de percepción, se acercan a ella para investigar, dan una vuelta sobre sí mismos para tratar de detectar al jugador por si está allí cerca, y vuelven con su patrulla, aunque invirtiendo el sentido de la marcha. El movimiento y la navegación de los fantasmas utiliza herramientas integradas en Unity, y para la decisión se usa el código de una máquina de estados finita genérica programada íntegramente en Visual Scripting de Unity (State Graphs).
D. El protagonista, John Lemon, está controlado por la IA mediante un árbol de comportamiento algo más complejo, programado mediante Behavior Designer. John trata de alcanzar la salida de la mansión de la manera más óptima, navegando el camino más corto y más seguro, evitando ser capturado por las gárgolas o los fantasmas. Para ello inicialmente puede conocer todo el escenario, sus puntos representativos y tener en una pizarra la posición exacta de todos los elementos (incluyendo agentes que están en movimiento).
E. Para resolver bloqueos el protagonista tiene la capacidad de empujar estatuillas de colores y llevarlas a otros sitios del escenario para desactivar gárgolas. También puede usar las estatuillas para interactuar con los fantasmas, teniendo cuidado de no ser capturado por ellos, pero pudiéndose beneficiar de sus cambios de ritmo y sentido en la patrulla. Todo con una implementación genérica que, dado el escenario que sea, el agente trate de minimizar el tiempo que tarda en conseguir ganar cada partida y minimizar el número de veces que es capturado en ese tiempo.
Revisión
Tener el repositorio a disposición de los profesores con todos los entregables, preparados en tiempo y forma por todos los miembros del grupo de manera equitativa, supone un 10% de la nota de la práctica. Los profesores tendrá una lista con los datos de todos los grupos y los enlaces a las organizaciones en GitHub (por ejemplo IAV00-G02, la del grupo 2 del curso Inteligencia Artificial para Videojuegos 2000-2001) donde se encontrarán los repositorios de las prácticas (IAV00-G02-P1, IAV00-G02-P2 e IAV00-G02-P3).
Revisión de la documentación
En esta primera fase de revisión hay un único entregable:
- Documento de diseño y desarrollo software según la estructura habitual, en el README.md. Supone un 10% de la nota.
Revisión del resultado
En esta segunda fase de revisión los entregables son estos:
- Proyecto con todos los ficheros de código fuente y recursos del proyecto de Unity. Se incluirán enlaces a documentos compartidos en abierto (o con el profesor) mediante Google Drive, desde donde descargar todo lo que por peso o problemas de licencia no pueda mantenerse alojado en GitHub vía Git LFS. Supone un 20% de la nota.
- Fichero con la versión ejecutable para Windows de 64bits (llamado por ejemplo IAV00-G02-P3 1.0.0.zip), publicada como lanzamiento (release) en el repositorio. Cada característica del prototipo (A, B, C, D y E) correctamente implementada supone un 10% de la nota. Además se dejará constancia de sus posibilidades mostrando por pantalla aquellas métricas que permitan valorar la eficiencia de la implementación: en este caso, tiempo de ejecución continuada sin fallos ni bloqueos, número de partidas ganadas por minuto, número de capturas sufridas por minuto, número de tareas/nodos en el árbol de comportamiento (y cuantas éxito o fracasos se producen)… y ratio de fotogramas por segundo.
- Documental con las pruebas del juego, añadiendo al documento de producción el enlace a un video oculto en YouTube (llamado por ejemplo IAV00-G02-P3), de menos de 5 minutos de duración, donde queda documentado y comentado por voz y títulos de texto el banco de pruebas realizado. Deberá estructurarse por características (de modo que la sección A1 sea la primera prueba de la característica A, la sección C3 la tercera prueba de la característica C, y así sucesivamente). Supone un 10% de la nota.
Más información
Además de la bibliografía recomendada, se pueden investigar las siguientes referencias. En ningún caso se debe replicar código de terceros sin entenderlo bien y «hacerlo nuestro», y siempre asegurándonos de que funciona exactamente como se requiere en esta práctica.
- Behavior Designer, de Opsive
https://opsive.com/assets/behavior-designer/ - Unity, Navegación y Búsqueda de caminos
Navegación y Pathfinding (Búsqueda de Caminos) – Unity Manual - Unity 2018 Artificial Intelligence Cookbook, Second Edition (Repositorio)
https://github.com/PacktPublishing/Unity-2018-Artificial-Intelligence-Cookbook-Second-Edition - Unity Artificial Intelligence Programming, 5th Edition (Repositorio)
PacktPublishing/Unity-Artificial-Intelligence-Programming-Fifth-Edition: Unity Artificial Intelligence Programming – Fifth Edition, published by Packt (github.com) - Unity, Visual Scripting
https://docs.unity3d.com/bolt/1.4/manual/index.html
Se pueden realizar ampliaciones para ir más allá en el aprendizaje.
- Permite que al pulsar la barra espaciadora, John Lemon pueda intercambiar entre ser controlado por el jugador mediante el teclado o por la IA.
- Programa una máquina de estados jerárquica para los fantasmas, pudiendo alertarse entre ellos.
- Crea un escenario con mecanismos más complejos, como puertas y llaves, rampas, etc.
- Mejora el razonamiento del protagonista sobre el estado y la posición de los distintos elementos (las estatuillas y los fantasmas), con algo de predicción para saber donde estará un fantasma dentro de cierto tiempo.
- Mejora la gestión sensorial, de manera que el protagonista vea a los personajes a través de su propia percepción, razonando también sobre el conocimiento que le aportan esas percepciones.
Esta página está licenciada bajo CC BY-NC-SA 4.0 por Laboratorios Narratech.