Sistema de IA en Godot, con Resources


Sí, es posible hacer un sistema de Inteligencia Artificial en Godot usando Resources, equivalente al de Unity que empleaba ScriptableObjects. Por cuestiones personales (o sea, vagancia), no he alcanzado el mismo nivel que en el prototipo de Unity y también porque el código de búsqueda de caminos va a cambiar drásticamente en la rama 4.0. Es decir, que trabajar en eso es por gusto y el combate como tal tendrá que esperar unos meses.
Encontrar la idea me ha tomado algo de tiempo y el punto de partida lo encontré estudiando el código fuente del port para Godot de Wesnoth. Se siente un poco raro volver a la época en que descargaba el código fuente de juegos libres a mansalva y me sumergía en ellos para aprender cosas. La diferencia entre Unity y Godot mayormente consiste en que Godot no permite múltiples scripts en un solo nodo. Por tanto, tuve que distribuir los scripts en una jerarquía de nodos, con el padre como gestor de estados y los hijos conteniendo los estados de la IA. Cada estado ejecuta diferentes bloques lógicos, que están almacenados como recursos. En un principio, había incluido la IA dentro de la escena de cada personaje, pero eso me planteaba un problemita mínimo: cada NPC que requiriera una IA diferente necesitaba su propia escena. Aquí les aclaro que en Godot, todo es una escena. Lo que en Unity sería un prefab, aquí es una escena que contiene, digamos, el modelo del personaje, su forma de colisión, scripts, etcétera.
Cuando tu acceso a internet se mide por horas o por volumen de tráfico, tiendes a ponerte un poco tacaño con los megabytes, por eso me pregunté si podía optimizar un poco más. Y sí, era posible, si creaba la IA en la escena de juego y no en la del personaje. Eso me permite reutilizar una misma escena de personaje con varias IA diferentes. Ambos métodos no son excluyentes, si necesito reutilizar personajes con la misma IA, puedo incluirla en su escena plantilla y ya.
Por ahora es solo un sistema muy primitivo sujeto a cambios, pero creo que la idea base es correcta, porque de hecho, no la inventé yo, sino gente mucho más experimentada.

Comentarios