As árvores de comportamento, ou Behaviour Trees (BTs) são uma arquitetura de IA que fornece aos Non Player Characters (NPC) do jogo a capacidade de selecionar comportamentos e executá-los, por meio de uma arquitetura semelhante a uma árvore que define operações lógicas simples, mas poderosas. Apesar das diversas possibilidades e facilidades das Behaviour Tree, a Unity não possui uma biblioteca nativa, ao contrário da UNREAL que possui a Behaviour Tree nativa. Dessa forma, para aplicar a Behaviour Tree usando a Unity, deve-se adquirir o componente por meio de produtos terceirizados ou implementar a sua própria Behaviour Tree. Para tanto,  será mostrado o pacote  Behavior Bricks da PadaOne Games. Entretanto, como é um componente Free, deve-se tomar cuidado ao utilizar em projetos, uma vez que o proprietário não possui a obrigatoriedade de atualizar ou dar suporte ao produto.

Definição 

As BTs possuem um sistema muito em comum com uma Máquina de Estado Finita Hierárquica, mas ao invés de utilizar estados, o principal componente é chamado de Tarefa.

A árvore de comportamento é uma árvore de nós hierárquicos que controlam o fluxo de tomada de decisão de uma entidade de Inteligência Artificial (IA). Nas extensões da árvore, as folhas, estão os comandos reais que controlam a entidade da IA, e formando os ramos estão vários tipos de nós utilitários que controlam a caminhada da IA pelas árvores para alcançar as sequências de comandos mais adequadas à situação. A Figura 1.0 apresenta um gráfico simples de comportamento das tarefas do NPC.

Figura 1.0 – Behaviour Tree

Como pode ser observado, a tarefa principal é dividida em outras três tarefas: Perseguir, Atacar e Patrulhar.. Cada uma dessas subtarefas possui outras subtarefas. De forma, que as tarefas vão sendo divididas em subtarefas até que forme as folhas das árvores.

As folhas da árvore proporcionam a comunicação entre a lógica da inteligência artificial e a game-engine do jogo, sendo utilizadas para buscar informações do que está acontecendo no jogo e verificar se alguma condição é verdadeira ou falsa.

As Tarefas

Existem dois tipos de tarefas: Condições e Ações. As condições são utilizadas para realizar checagem do que está acontecendo na cena do jogo, por exemplo, se o jogador está próximo ao player, verificar a quantidade de vida, entre outras condições. Elas não realizam nenhuma mudança na cena.
As ações são utilizadas para realizar mudanças no sistema, por exemplo, atacar o player, patrulhar, diminuir a vida do jogador, entre outras ações que um personagem pode executar. Além disso, existem dois tipos básicos de tarefas compostas, conhecidos como sequências ou seletores

As sequências possuem a responsabilidade de executar as subtarefas. Nesse sentido, quando uma subtarefa obtém sucesso, a sequência passa a executar a próxima subtarefa. Porém quando uma subtarefa falha a execução a sequência é interrompida.  Porém, um seletor executa todas as subtarefas, mesmo se uma subtarefa retornar uma falha na execução.  

Em seguida, a estrutura da árvore de comportamento possui mais propriedades, com o intuito de aumentar a escalabilidade de uma árvore, como a utilização de Decorators. De forma simplificada, os Decorators têm como objetivo permitir que sejam adicionados novos comportamentos sem que haja a necessidade de modificar o código original.  Pode-se pensar nos Decorators como um sistema de Filtros. 

Agora que você conhece um pouco sobre a árvore de comportamento, pode-se apresentar o Behaviour Bricks.

Conhecendo a Behaviour Bricks

A Behavior Bricks é uma ferramenta visual para criar comportamentos em jogos digitais usando a técnica mais utilizada na indústria: árvores de comportamento. A ferramenta visa acelerar o desenvolvimento desses comportamentos, permitindo que os designers de videogames (que podem não ter conhecimentos técnicos) criem e modifiquem esses comportamentos.

Em Behavior Bricks existem duas ações primitivas diferentes: actions e conditions . Ações são rotinas que executam a tarefa específica que modifica o ambiente do jogo, enquanto as condições verificam o estado do ambiente e, com essas informações, decidem a parte do comportamento que deve ser executada. Todas as ações primitivas podem ter campos de entrada e saída para comunicar a ação com outras.  A Figura 2.0 apresenta a estrutura da construção de uma árvore de comportamento.

BTS

Figura 2.0 – Apresentação gráfica Behaviour Bricks

No próximo artigo, vou apresentar como implementar uma simples árvore de comportamento usando o pacote Behaviour Bricks.