Articles

Máquinas de Estado Finito [Parte 1] – Recursos de Desarrollo de Unity de TKoU

Las Máquinas de Estado Finito pueden ser algo que todos los desarrolladores pueden haber oído al menos una vez en sus pocos años de empezar a desarrollar juegos en Unity.

¿Qué es una Máquina de Estado Finito de todos modos? Bueno, hay mucho que cubrir es por eso que vamos a hacer al menos 3 partes. Básicamente, una Máquina de Estado Finito (o FSM) es un patrón de diseño donde la automatización entra en juego. Se utiliza comúnmente en las implementaciones de IA para ciertos comportamientos. Por ejemplo: Caminar, Atacar, Estar en reposo, etc. FSM también puede ser implementado en NPCs y es más común en RPGs de Mundo Abierto.

fsm1Tratemos FSM como un supervisor:

Ahora, el supervisor comprueba el estado de una IA. Dependiendo del estado, la IA reaccionará en él. También, dependiendo del tipo de una IA (si es de tipo volador, o de tipo terrestre, o de tipo nadador) es la acción que la IA realizará. En este escenario, FSM le dice a la IA que está en el «Estado de Patrulla», y le dirá a la IA que «Camine de A a B». A menos que haya un cambio de estado, la IA sólo caminará de A a B.

fsm2

Para cambiar de estado, primero debemos tener una condición. En la imagen de la izquierda, la IA ve al jugador, y se lo dice al supervisor. Ahora el supervisor cambiará el estado de la IA, y comenzará a atacar.

1ZmLLoS1bAl71Ea_BNZzHWaja5YsjvqLa2z-ubNYDe nuevo, la IA comienza a patrullar de nuevo ya que el jugador no está en su línea de visión.

Como se ve en estos dibujos mal hechos, cada estado tiene sus condiciones antes de cambiar a otros estados.

Miremos el diagrama de abajo.

sNz-b43jHw-bZzuRbNlrvHQ

Aquí hay un diagrama de estados de una IA normal. Las líneas rojas representan falso en la condición que se requiere para cambiar de estado. El diagrama es bastante sencillo. La IA estará en estado inactivo si llega a su destino, y viceversa. Si ve un enemigo, comenzará a atacar. El FSM ahora maneja todas las transiciones entre estados y ayuda a la IA a hacer la acción que está disponible para ese estado.

Ahora vamos a desglosar nuestro Sistema FSM.

  • Sistema FSM Principal – Este es será el que controlará los estados de la IA y comprueba si las condiciones entre estados. El FSM principal contendrá todos los estados, y manejará las llamadas de eventos de las Acciones FSM.
  • FSM Estado – Esto determina el estado actual de la IA y contiene todas las acciones que se coloca en la IA.
  • FSM Acción – Esta será la acción que la IA hará cuando la IA está en un estado específico.

¿Ahora cómo lo haremos? Vamos a mapear todo.

sV8-Gi7zqfM4YoWEXA-SCGw

Este será el bucle de nuestro FSM. Primero inicializamos el FSM, creamos estados, creamos acciones y las mapeamos todas juntas. Después de haberlas mapeado, ahora iniciaremos el FSM e indicaremos el estado en el que la IA comenzará. Ahora, la IA cambiará a un estado específico, y el FSM inicializará la acción, la actualizará hasta que termine la acción y enviará un evento indicando que la acción ha terminado. Finalmente, el FSM volverá a cambiar el estado.

Otra cosa que provocará un cambio de estado es cuando se llama a un evento fuera de la lógica de la IA. Como cuando creamos un comandante y le dice a todos los soldados que dejen de moverse.

Con esto termina la primera parte de nuestro tutorial de FSM. Espero haberte explicado bien el FSM. Si todavía no lo entiendes, probablemente necesites ver todo en acción primero, y ver escanear todo por ti mismo. Así es como yo lo aprendí.
En la próxima parte, primero discutiremos de nuevo algunas implementaciones simples de FSM de la vida real, y empezaremos a scriptear todo nuestro motor FSM desde cero.