La inteligencia artificial es uno de los puntos que puede ser uno de los puntos más problemáticos, sin embargo aunque no lo creas hay muchas cosas que entra en el tema de la inteligencia artificial como los menús, el character controller, el clima, la generación de contenido es también considerado inteligencia artificial y todo aquello que genere objetos o cambio de comportamientos también lo es, en este caso nos centraremos en la inteligencia para enemigos.
La inteligencia artificial para actores, ya sea actores o enemigos es uno de los más complejos, debido al uso de físicas, sensores (que en el fondo son físicas) y mallas de navegación procedimental, también hay que entender que algunas inteligencias son diferentes según el género de tu juego, por eso es necesario tener una planeación milimétrica de los comportamientos y ser estratégico para programarlo. A continuación algunos consejos al respecto.
Algunos patrones de diseño en programación habituales para inteligencia artificial, sería por ejemplo las máquinas de estado finito para una inteligencia más simple o árboles de comportamientos para máquinas algo más complejas, sin embargo es necesario que estudies más a fondo sobre el tema, ya que hay muchísimos patrones y para inteligencia artificial hay muchos muy distintos y con características muy particulares, te puedo asegurar que ya has usado estos modelos muchas veces sin darte cuenta, ahora la intención es de que lo hagas más consciente y más organizado. Aqui te dejo algo de literatura respecto al tema.
Optimiza tus scripts evitando tanto como sea posible redundancias y comprobaciones innecesarias, trata de meditar qué cosas son necesarias que sean calculadas todo el tiempo y que cosas puedes hacer comprobaciones poco exhaustivas. Un ejemplo es usar el movimiento en fixed update y los sensores de movimiento o de sonido puede ir aparte en una corrutina que puede comprobarse cada medio segundo.
Si tienes conocimiento avanzado de programación y si requiere un pathfinding en tiempo real tendrías que hacer tu propio algoritmo en otro hilo del procesador.
Crea un cerebro maléfico que controle la gestión de enemigos en la partida, este script puede ser un patrón singleton, encargado de engendrar nuevos enemigos, eliminar o reutilizar los enemigos ya fallecidos, aumenta o disminuye la prioridad de la inteligencia del enemigo según la distancia de la que esté de nuestro jugador.
Crea pequeños scripts que sean de uso común entre una inteligencia artificial y tu jugador, por lo general el jugador usa rutinas muy similares a los enemigos en la forma de desplazarse, atacar y animarse, aparentemente no tiene ventaja, pero te permite testear cada enemigo y controlarlo. Esto es muy común en juegos de coches cuando el jugador llega a la meta, la IA toma el control del coche y juega solo, también ocurre cuando juegas contra tu propio fantasma para romper un récord, el fantasma es una IA que sigue puntos en una pista.
Si por casualidad usas una máquina de estado finito para la inteligencia artificial de tus enemigos, considera el uso de animator, ya que esta es una máquina de estado finito para animación que permite el uso de scripts, así no tendrás que crear la máquina desde el inicio, sino que aprovechas lo que te ofrece unity, evitando la redundancia.
Piense en usar programación modular para absolutamente todo, es mejor hacer varios scripts de pequeños comportamientos que un gran script del comportamiento de un solo enemigo en particular. Un ejemplo podría ser el comportamiento de una torreta que gira tratando de localizar al jugador para disparar y el comportamiento de un soldado que patrulla un área, pero que cuando oye al jugador, gira para localizarlo y tratar de atraparlo. como ves en ambos casos el actor se gira con el mismo fin.
Como conclusión, ya que la inteligencia artificial de NPC usa mucho de las físicas para operar, sería bueno que regreses al blog de consejos de físicas para sacarle mejor partido a las físicas, al igual que a los consejos de scripting para saber cómo mejorar este aspecto. No siendo mas eso es todo por ahora. Nos vemos en otro blog.
Comments