Inicio     |     Sobre     |     GitHub     |     Games     |     Contato                        

sexta-feira, 1 de janeiro de 2021

Máquina de Estados Aplicada a Jogo: Resumindo e Simplificando


    As máquinas de estado (FSM do inglês Finite State Machine) são a velha guarda no desenvolvimento de jogos. Estão presentes desde os primórdios, quando a complexidade dos jogos começa a aumentar, sendo necessária um pouco mais de lógica para controlar os diferentes possiveis estados de um jogo ou de um jogador. O que poucos sabem é que uma maquina de estados pode ser usada para controlar quase tudo em um jogo, e ao contrario do que muitos pensam, ela não é exatamente uma inteligência artificial.


O que é uma Máquina de Estados?


    A máquina de estados na verdade faz parte da engenharia de software e nada mais é do que uma forma  simples de descrever o funcionamento de um sistema utilizando estados e atributos de transição. A Figura 1 ilustra a caracteristica básica de uma máquina de estados.


Figura 1 - Exemplo simples da representação de uma máquina de estados.


Como pode/é usada em Jogos Digitais?


    Nos jogos digitais as FSM podem ser usadas para os mais váriados objetivos, que vão desde descrever processos até controlar animações ou NPCs (Non-player characters). Alguns exemplos dos principais usos dentro dos jogos digitais são citados a seguir.

    Controlador de ambientes, por exemplo os estados de dia, noite, por do sol ou nascer do sol. Clima chuvoso, nevando, sol, são exemplos de estados do ambiente que podem ser controlados por uma maquina de estados simples como o exemplo da Figura 2.



Figura 2 - Esquema de uma máquina de estados simples que controla a transição de dia e noite.


    Controlador de animações é o mais comum, por exemplo, o proprio motor de jogos Unity oferece uma muito boa ferramenta chamada de Animator, que na verdade nada mais é do que uma maquina de estados que pode cumprir muito mais que sua função principal (controlar animações).



Figura 3 - Exemplo prático do uso de máquinas de estados na animação de um personagem no motor de jogos Unity.


    Controlador de menus, cenas e telas é outra utilidade das maquinas de estados. Não só no planejamento de possiveis transições mas também na implementação dos controladores. Controlador de Agentes e Bots (NPCs), é um dos mais importantes usos, no controle de inimigos e personagens de jogos as maquinas de estados são responsáveis por gerar os comportamentos e reações ao ambiente do jogo. 


Máquinas Pseudo Inteligentes Baseadas em Estados?


    Muitos chamam as maquinas de estado de inteligência artificial, por serem muito usadas como controladores de decisão em agentes dentro de jogos digitais. A verdade é que essa estrutura não deve ser considerado uma IA, pois ela não é dinâmica, não possui a capacidade de aprendizado, dentre algumas das principais caracteristicas dos sistemas inteligentes. Então, qual a razão de ainda serem tão usadas no controle de NPCs e inimigos no lugar de uma rede neural ou algoritmos genéticos?

      

Figura 4 - Controlador simples de um inimigo em um jogo digital. De acordo com a máquina de estados, o bot deve atacar o inimigo caso esteja dentro de sua visão, caso contrário o bot deve continuar patrulhando.


    A resposta é simples, agilidade, pois não exige muito processamento, a possibilidade de maior controle, pois você sabe como o agente irá se comportar e não há o risco de surgirem comportamentos estranhos ou indesejados, e por fim, a facilidade de aplicação. Além disso, na maioria dos casos é o suficiente para cumprir o proposito em questão. Mas como nem tudo são flores, existem alguns pontos negativos ao usar esse tipo de estrutura ao controlar agentes que deveriam ser mais realistas ou desafiadores. A repetição é o maior desses problemas, pois não importa o quão complexa seja a estrutura da maquina de estados, sempre será possivel encontrar um padrão no comportamento pois ela não sofre alterações.



Figura 5 - Para que a máquina de estados seja capaz de controlar um agente, ela deve receber dados do ambiente para realizar as transições de estados.


    Ao longo de nossas pesquisas, faremos o uso das maquinas de estados em vários exemplos e aplicações práticas junto a outras técnicas. Também vamos nos aprofundar nos estudos de técnicas para construir máquinas de estados finitos. Acompanhe a pesquisa visitando o blog e se inscrevendo para receber os novos artigos por e-mail.


Referências para saber mais:


AI for Games: THIRD EDITION (Ian Millington)

AI for Game Developers (David M. Bourg, Glenn Seeman), 2004.

O Animator Controller da Unity como uma Máquina de Estado (Irene Naya) Disponível em: <https://medium.com/@irenenaya/unitys-animator-controller-as-a-state-machine-5ef2f84e6c53>

How to create a finite state machine to load your game using JavaScript (Verónica Valls) Disponível em: <https://medium.com/game-development-stuff/how-to-create-a-finite-state-machine-to-load-your-game-using-javascript-e10a48e675b9>

Fun with finite state machines! (Moral Robots) Disponível em: <https://medium.com/@MoralRobots/fun-with-finite-state-machines-b0b2982c25d9>

Solve Jump Game Problem using State Machine (Tankery Chen) Disponível em: <https://medium.com/@tankery/solve-jump-game-problem-using-state-machine-4a3b1d6e5fc0>

Why Storing State Machines in ECS is a bad idea (Sander Mertens) Disponível em: <https://ajmmertens.medium.com/why-storing-state-machines-in-ecs-is-a-bad-idea-742de7a18e59>

Implementing a Finite State Machine Using C# in Unity – Part 1 (Shamim Akhtar) Disponível em: <https://faramira.com/implementing-a-finite-state-machine-using-c-in-unity-part-1/>

Finite-state machine (Wikipedia EN) Disponível em: <https://en.wikipedia.org/wiki/Finite-state_machine>



Creative Commons License

Nenhum comentário:

Postar um comentário