Articles

Finite State Machines [Parte 1] – Unity Development Resources from TKoU

Finite State Machines pode ser algo que todos os desenvolvedores podem ter ouvido pelo menos uma vez em seus poucos anos começando o desenvolvimento do jogo em Unity.

O que é uma Finite State Machine afinal? Bem, há muito para cobrir e é por isso que vamos fazer pelo menos 3 partes. Basicamente, uma Finite State Machine (ou FSM) é um padrão de design onde a automação entra em jogo. Comumente usada em implementações de IA para certos comportamentos. Ie: Andar, Atacar, Mover, etc. FSM também pode ser implementado em NPCs e é mais comum em RPGs do Open World.

fsm1Vamos tratar o FSM como um supervisor:

Agora, o supervisor verifica o estado de uma IA. Dependendo do estado, a IA reagirá sobre ele. Também, dependendo do tipo de IA (se é do tipo voador, ou tipo terrestre, ou tipo nadador) é a ação que a IA irá fazer. Neste cenário, o FSM diz à IA que ele está no “Estado Patrulha”, e vai dizer à IA para “Caminhar de A a B”. A menos que haja uma mudança de estado, a IA só andará de A para B.

fsm2

Para mudar de estado, primeiro temos de ter uma condição. Na imagem da esquerda, a IA vê o jogador, e diz ao supervisor. Agora o supervisor vai mudar o estado da IA, e vai começar a atacar.

Again, a IA começa a patrulhar novamente uma vez que o jogador não está na sua linha de visão.

Como visto nestes desenhos mal feitos, cada estado tem suas condições antes de mudar para outros estados.

Vejamos o diagrama abaixo.

sNz-b43jHw-bZzuRbNlrvHQ

Aqui está um diagrama de estados de uma IA normal. As linhas vermelhas representam falso na condição que é necessária para mudar de estado. O diagrama é bastante reto. A IA estará no estado ocioso se ela chegar ao seu destino, e vice-versa. Se ele vir um inimigo, ele começará a atacar. O FSM agora lida com todas as transições entre estados e ajuda a IA a fazer a ação que está disponível para aquele estado.

Agora vamos quebrar nosso sistema FSM.

  • Sistema FSM principal – Este será o que controlará os estados da IA e verificará se as condições entre estados. O FSM Principal irá conter todos os estados, e irá lidar com as chamadas de eventos das Ações do FSM.
  • FSM Estado – Isto determina o estado atual da IA e contém todas as ações que são colocadas na IA.
  • FSM Ação – Esta será a ação que a IA fará quando a IA estiver em um estado específico.

Agora como faremos isso? Vamos mapear tudo.

sV8-Gi7zqfM4YoWEXA-SCGw

Este será o loop do nosso FSM. Primeiro inicializamos o FSM, criamos estados, criamos ações e as mapeamos todas juntas. Depois de mapeá-las, vamos agora iniciar o FSM e indicar o estado em que a IA começará. Agora, a IA mudará para um estado específico, e o FSM inicializará a ação, atualizará até que a ação termine e enviará um evento indicando que a ação está terminada. Finalmente, o FSM vai voltar e mudar o estado.

Outra coisa que vai causar uma mudança de estado é quando um evento é chamado fora da lógica da IA. Como quando criamos um comandante e dizemos a todos os soldados para pararem de se mover.

Isto termina a primeira parte do nosso tutorial do FSM. Espero ter explicado bem o FSM para vocês. Se você ainda não entendeu, provavelmente precisará ver tudo em ação primeiro, e ver tudo por si mesmo. Foi assim que eu aprendi.
Na próxima parte, vamos primeiro discutir novamente algumas implementações simples de FSM na vida real, e vamos começar a scriptar todo o nosso Mecanismo FSM do zero!