Pelo que entendi nas Árvores de Comportamento, cada Comportamento deve ser uma Ação curta, orientada para objetivos, que pode ser realizada em algumas iterações.
Então, por exemplo, abaixo está uma imagem de uma Árvore de comportamento:
Agora, vamos supor que o comportamento Dirigir ao inimigo requer mais do que algumas iterações na árvore. Assim, a cada passo, o Drive To Enemy é chamado porque agora está no estado de execução .
O problema é que eu quero chamar Evade Enemy se um inimigo estiver próximo. E considerando que o Drive To Enemy é sempre chamado, eu nunca tenho a chance de chamar Evade Enemy ( provavelmente deveria ser chamado de Evite o Inimigo ).
- Devo percorrer a árvore CADA passe, independentemente da ação em execução no momento?
- Estou fazendo isso da maneira certa?
- Qual é a maneira correta de lidar com esse comportamento?
Originalmente solicitado no Stackoverflow. O pensamento aqui seria um local mais apropriado para fazer esta pergunta.
Respostas:
Veja a imagem que forneci na minha resposta anterior :
Se você imaginar que o nó 1 é 'Evade Enemy' e o nó 2 é 'Chase Enemy', você verá que, embora na segunda iteração (quando tudo estiver verde, exceto '2' e 'B', seja na segunda iteração 'Evade Enemy' ainda é verificado primeiro. Somente quando 'Evade Enemy' falha, porque não há inimigos por perto, 'Chase Enemy' é ativado novamente. Quando 'Chase Enemy' é visitado novamente, ele percebe que está no estado 'running' e pula diretamente para 'B'.
Isso significa que toda vez que a árvore é verificada, ela sempre se desloca da esquerda para a direita. Mesmo quando um nó é marcado como em execução, os nós de maior prioridade ainda são verificados primeiro.
Não tenho certeza se você pretende processar seus nós da direita para a esquerda, mas é assim que parece que eles estão organizados (ou seja, sob iludir o inimigo, localize o inimigo à direita da unidade na direção oposta). Se precisar de mais explicações, pergunte no bate-papo ou em uma de suas perguntas existentes sobre o assunto.
fonte