PAC2 – IA para juegos de estrategia y rol
Presentación general
En esta segunda actividad hemos practicado con el movimiento de agentes en Formation Motion y Flocking, y decision making con behavoir trees, esta vez con escritura de código en C#.
ACT 1: patrulla de vigilantes
Esta primera actividad me ha sorprendido lo sencilla que ha resultado, ya que le he pedido a ChatGPT (enlace a la conversación en la webgrafía) que hiciera un script adecuado para mi escena con los parámetros mencionados en el GitHub de la asignatura y ha dado un resultado decente al primer intento.
Como en la actividad anterior configuré correctamente al agente patrolling, básicamente lo que he hecho ha sido crear diversas copias del guardia (cambiándoles el color de la textura a violeta para diferenciar), pero sin scripts de movimiento y los he agrupado bajo un Empty que contiene el componente del script Formation Motion. He configurado el script para que pueda introducir la figura de la formación dinámicamente.
ACT 2: colmena de insectos
He decidido que mi colmena de insectos sea un enjambre de abejas y un panel como FlockManager (no es lo más original del mundo, lo sé, pero es que he encontrado un modelo de una abeja muy mona que no podía no usar).
Para esta actividad he partido del código ofrecido por nuestro profesor en GitHub, pero le he realizado diversas modificaciones con la ayuda de ChatGPT para que el comportamiento del enjambre sea más natural y esté más controlado. Principalmente, lo que he hecho ha sido añadir un radio máximo del que se pueden alejar las abejas respecto a la colmena y he aumentado bastante los valores de los vectores para que tuviera todo un movimiento más enérgico. Además, he añadido alteraciones en los vectores para que se muevan de manera más aleatoria.
ACT 3: líder del flocking
3.1. Comportamiento y movimiento
Primeramente en esta actividad he intentado utilizar Muse Behavoirs en la versión 0.11, pero ha resultado extremadamente inestable (además inutilizaba el comportamiento de los demás agentes por algún motivo) con “crasheos” de Unity. En su versión 0.10.1. (la recomendada por nuestro profesor) me ha dado múltiples errores al cargar el proyecto, posiblemente debido a la falta de componentes de la versión más moderna.
Por estas razones, he decidido proceder con la implementación con Behavior Bricks. Este asset a simple vista parece más complejo y “tosco” que Muse Behavoirs, pero bueno, servirá. Lo primero que he hecho ha sido seguir un poco el esquema de los antiguos apuntes de la asignatura, pero estos eran para un comportamiento distinto al que queremos para esta abejita así que le he pedido a ChatGPT que haga algunas modificaciones en el script de la condición “Is Cop Near?” y también en el árbol de lógica de la IA.
El script de condición se debe colocar en la carpeta “conditions” del asset BehaviorBricks para que el editor lo detecte.
3.2. Seguimiento del flocking
Inesperadamente, la parte que más reto me ha supuesto ha sido la de hacer que el flocking siguiera a la abeja líder cuando se requería. Ha sido gracias al tutorial Unity AI Swarming Tutorial (Stephen Barr, 2018) que he conseguido incorporar una lógica sencilla que hiciera seguir al objeto LeadBee, aunque en cambio el código de flocking se ha visto bastante alterado.
Por algún motivo también he tenido problemas con la orientación de las abejas, ya que todas “spawneaban” torcidas 90º en el eje Z. Lo he arreglado aplicando una rotación extra directamente en el script de los “flocks”.
También he tenido problemas al hacer que los agentes colisionaran con los insectos, puesto que también molestaban al LeadBee y el movimiento era, por tanto, muy ortopédico. He intentado solucionarlo haciendo que las abejas colisionen con los policías con coliders y no con NavMeshObstacles como había hecho originalmente, pero para esto he tenido que utilizar las layers de Unity y el resultado no es tan satisfactorio. En el vídeo demostrativo se incluyen ambas opciones.
Webgrafia
- Simpson, C. (2023, December 8). Behavior trees for AI: How they work. https://www.gamedeveloper.com/programming/behavior-trees-for-ai-how-they-work
- Decision making for games. (n.d.). https://gebakx.github.io/dm-games/#38
- gameAIUnity/dm/dm.md at main · gebakx/gameAIUnity. (n.d.). https://github.com/gebakx/gameAIUnity/blob/main/dm/dm.md
- quick:design [BehaviorBricks]. (n.d.). https://bb.padaonegames.com/quick:design
- Stephen Barr. (2018, July 15). Unity AI Swarming Tutorial (Flocking but it follows the Player) [Video]. YouTube. https://www.youtube.com/watch?v=5ziHg2kO56s
- OpenAI. (2024). ChatGPT (versión 22 de noviembre) [Large language model]. https://chat.openai.com/chat
- Conversación de ChatGPTutilizada para implementación, solución de errores de compilación, proporcionar ideas y limpiar el código: https://chatgpt.com/share/67507a9f-7680-800b-9956-d8882661b1ed
Assets
Sketchfab. (n.d.). Beee , bumblebee – Download Free 3D model by i.deal3d. https://sketchfab.com/3d-models/beee-bumblebee-816b3d1876434439bb02b6046d51ca32
Sketchfab. (n.d.). Beee , bumblebee – Download Free 3D model by i.deal3d. https://sketchfab.com/3d-models/beehive-5627f41b490246a2a1e1e88b554e17bf
Sketchfab. (n.d.). Stylized tree stump – Download Free 3D model by Aartee. https://sketchfab.com/3d-models/stylized-tree-stump-04d51f5c2fb643aab3b93b451d1b77c9