Usando ScriptableObjects para IA

Hace unos meses el canal de Unity publicó una serie de videos, basados mayormente en esta conferencia:


Hasta hace poco no había tenido tiempo de estudiar los tutoriales y comenzar a adaptar el código, o incluso decidir si era mejor que mi anterior intento. Y recién hace dos días fue que pude mirar un poco más lo que había hecho y cambiar algunas cosas.
En esencia, el sistema me parece bastante bueno. Por lo menos resuelve el problema de la modularidad de la IA, algo que no había logrado resolver en mi aproximación anterior. Confieso que últimamente he dudado de los ScriptableObjects, pero creo que en este caso sí son muy útiles. Para un RPG, poder definir comportamientos específicos para cada entidad es esencial. Por ejemplo, un mago no pelea de la misma forma que un guerrero de largo alcance, que a su vez es muy distinto a un guerrero cuerpo a cuerpo, y así sucesivamente, según las clases o el equipo de cada NPC.
Los tutoriales muestran de forma relativamente sencilla cómo armar una máquina de estados usando ScriptableObjects y cómo solucionar el problema que se deriva de que éstos guardan la información entre corridas. Pero además, la conferencia abunda un poco más en otros trucos que podemos hacer con ScriptableObjects, usándolos como enums, por mencionar uno.
Yo recomiendo ver la conferencia primero y luego los tutoriales, si estás buscando una guía para desarrollar tu propia inteligencia artificial. Y ya que hablamos del tema, tengo que decir que la IA de Divinity: Original Sin 2 es genial. Me encanta cómo los NPCs encuentran siempre la mejor forma de fastidiarte, buscando lugares elevados, lanzando a tus compañeros en el fuego, etc. La verdad, no recuerdo haber visto un sistema tan avanzado de combate.

Comentarios