Recreando la IA de The Last of Us 2 en Unity
Índice
- Introducción
- Desarrollando la inteligencia artificial en videojuegos
- Aumentando la realismo en los enemigos
- Creando una inteligencia artificial consciente de los compañeros de equipo
- Implementando el patrón observador
- Escenario de implementación
- Uso de Unity en el proyecto
- Mejorando el entorno de prueba
- Creando una inteligencia artificial con patrullaje
- Ampliando las órdenes y eventos en el escuadrón
- Conclusiones
🤖 Desarrollando la inteligencia artificial en videojuegos
La inteligencia artificial (IA) en los videojuegos ha avanzado significativamente en los últimos años, logrando simular comportamientos realistas y brindar experiencias envolventes a los jugadores. En esta era de avances tecnológicos, los desarrolladores de videojuegos buscan constantemente formas de mejorar la IA y hacerla cada vez más auténtica.
🎮 Aumentando el realismo en los enemigos
Uno de los aspectos clave para lograr una IA creíble es hacer que los enemigos trabajen de manera colaborativa, evitando el fuego cruzado y flanqueando al jugador. Un ejemplo destacado de este avance se encuentra en el segundo juego de la serie "The Last of Us", desarrollado por Naughty Dog. En esta entrega, Naughty Dog llevó la IA a otro nivel al crear relaciones entre los enemigos. Por ejemplo, cuando muere un perro en el juego, su dueño se enfada; cuando matas al dueño, el perro llora y se queda a su lado. Además, si ven morir a uno de sus compañeros, a menudo gritarán su nombre, lo que brinda un realismo impactante y hace que el jugador se dé cuenta de que acaba de matar al amigo de alguien.
🤝 Creando una inteligencia artificial consciente de los compañeros de equipo
Inspirado en estos avances, decidí desarrollar una IA que fuera consciente de sus compañeros de equipo. Mi objetivo era que la IA supiera quién estaba vivo y quién estaba muerto, pero este concepto se puede expandir aún más. Por ejemplo, se podría incluir información sobre cuándo fue visto por última vez un compañero o con quién estaba, o qué objetos llevaba consigo. Este enfoque resultaría especialmente adecuado para juegos de misterio o intriga.
Para lograr este objetivo, utilicé lo que se conoce como el patrón observador (observer pattern). Este patrón de diseño implica que un sujeto, en este caso el escuadrón, tenga una lista de observadores, que son los miembros del escuadrón. Cuando se produce un cambio, el sujeto notifica a los observadores, y estos actualizan sus propias listas con la nueva información.
🎯 Implementando el patrón observador
Comencé creando una clase para la IA, a la cual llamé "Squad Member" (Miembro del Escuadrón). Cada miembro del escuadrón tenía una lista que contenía la información de sus compañeros, indicando si estaban vivos o muertos. Además, cada miembro del escuadrón tenía una máquina de estados finitos para controlar su movimiento y acciones. Aunque no lo implementé en este proyecto, también se podría incluir información sobre la posición y comportamiento del jugador.
A continuación, implementé un escenario para probar esta IA. Imaginemos que tenemos un escuadrón de seis miembros, cada uno con la información mencionada anteriormente. Si bien podrían comunicarse directamente entre ellos para intercambiar información, encontré que sería más sencillo utilizar el patrón observador y conectarlos a una clase de escuadrón.
🌍 Escenario de implementación
Imaginemos que el miembro del escuadrón llamado "Manny" muere, lo que lo separa del escuadrón. Ahora, el miembro del escuadrón llamado "Nora" encuentra el cuerpo de Manny y actualiza su lista de información, marcándolo como muerto y recordando que el jugador debe estar cerca en ese momento. Los demás miembros del escuadrón no saben nada de esto. Luego, Nora comunica esta información a la clase de escuadrón, que a su vez la comunica al resto de los miembros del escuadrón, quienes actualizan sus propias listas con la nueva información.
También utilicé este diseño para que los miembros del escuadrón puedan enviarse órdenes entre sí. En este escenario, Nora puede ordenar a los demás miembros del escuadrón que busquen al asesino, y que luego se reagrupen en el centro. Mientras los demás están buscando, yo mato a Owen, ampliando así el algoritmo para que la IA sepa quién falta y quién ha vuelto. De esta manera, el escuadrón es consciente de que Owen salió a buscar al jugador pero nunca regresó al punto de reunión.
⚙️ Uso de Unity en el proyecto
Aunque es posible implementar esta IA en cualquier motor de desarrollo de videojuegos, en mi caso elegí Unity. Comencé creando un personaje simple que pudiera caminar y mirar a su alrededor. Luego, multipliqué este personaje varias veces y eliminé el movimiento para crear la IA. Posteriormente, permití que los personajes de IA pudieran ser eliminados y que se supiera quién murió utilizando el patrón observador mencionado anteriormente.
🌳 Mejorando el entorno de prueba
Inicialmente, mi escenario de prueba era bastante simple, por lo que decidí mejorarlo creando un entorno en el que mi IA pudiera patrullar libremente. También actualicé los gráficos del escenario para que fueran más atractivos, ya que los gráficos anteriores me causaban problemas visuales.
🚶♂️ Creando una inteligencia artificial con patrullaje
Para ampliar las capacidades de mi IA, implementé un algoritmo simple de patrullaje. Esto permitió que los personajes de IA patrullaran libremente por el área designada, agregando un elemento de movimiento y comportamiento más realista.
💬 Ampliando las órdenes y eventos en el escuadrón
Por último, amplié la funcionalidad del escuadrón para que pudiera recibir órdenes y esperar eventos específicos. En el video de demostración, se puede observar cómo Nora ordena a sus compañeros de escuadrón que busquen al asesino y luego se reagrupen en el centro. Mientras los demás están buscando, yo elimino a Owen, y el algoritmo se actualiza para indicar quién falta y quién ha regresado. De esta manera, el escuadrón es consciente de que Owen salió a buscar al jugador pero nunca regresó al punto de reunión.
📝 Conclusiones
En resumen, en este proyecto he intentado emular la inteligencia artificial del juego "The Last of Us 2" al crear una IA que sea consciente de sus compañeros de equipo. Utilicé el patrón observador para lograr este objetivo, permitiendo que los miembros del escuadrón se comuniquen entre sí y actualicen su información en tiempo real. Aunque solo llegué hasta cierto punto en este proyecto, existen infinitas posibilidades para expandir la IA y agregar más características. Espero que este proyecto haya sido inspirador y útil para aquellos interesados en el desarrollo de IA en videojuegos. ¡Gracias por leer!
Pros:
- Aumenta el realismo en los enemigos del juego.
- Permite crear una IA consciente de los compañeros de equipo.
- Utiliza el patrón observador para una comunicación efectiva entre los miembros del escuadrón.
- Puede ser implementado en el motor de desarrollo de videojuegos Unity.
Contras:
- No se han implementado todas las características posibles de la IA.
- Se requiere un diseño y desarrollo más complejo para videojuegos de mayor escala.
💡 Destacados
- Avances en la inteligencia artificial de los videojuegos.
- Creando una IA consciente de los compañeros de equipo.
- Implementando el patrón observador en el desarrollo de videojuegos.
- Utilizando Unity como motor de desarrollo de videojuegos.
🙋♂️ Preguntas frecuentes
P: ¿Cuál es el objetivo principal de desarrollar una inteligencia artificial consciente de los compañeros de equipo en videojuegos?
R: El objetivo principal es aumentar la sensación de realismo y ofrecer una experiencia de juego más envolvente, donde los personajes de IA sean conscientes de la vida y muerte de sus compañeros y puedan comunicarse entre sí para tomar decisiones estratégicas.
P: ¿Qué es el patrón observador y cómo se aplica en el desarrollo de IA en videojuegos?
R: El patrón observador es un diseño de software que permite la comunicación efectiva entre un sujeto y una lista de observadores. En el contexto del desarrollo de IA en videojuegos, el sujeto sería el escuadrón o equipo de personajes de IA, y los observadores serían los miembros individuales del escuadrón. Cuando se produce un cambio en el estado de un miembro del escuadrón, este lo notifica al escuadrón, que a su vez comunica la información a los demás miembros.
P: ¿Qué ventajas ofrece el uso de Unity en el desarrollo de videojuegos con IA?
R: Unity es un motor de desarrollo de videojuegos ampliamente utilizado y ofrece una amplia gama de recursos y herramientas para el desarrollo de IA en videojuegos. Además, cuenta con una gran comunidad de desarrolladores que comparten recursos, tutoriales y soluciones a problemas comunes, lo que facilita el proceso de desarrollo.
P: ¿Se puede implementar esta IA en otros motores de desarrollo de videojuegos además de Unity?
R: Sí, es posible implementar esta IA en otros motores de desarrollo de videojuegos. El patrón observador y los conceptos presentados en este proyecto son independientes del motor de desarrollo utilizado y pueden adaptarse a diferentes entornos de programación de videojuegos.
Recursos: