Até agora, incluímos muitos comportamentos diferentes para o nosso pequeno agente e também temos a funcionalidade de disparar contra ele
e sua saúde diminuir e aumentar sua saúde, mas não estamos usando isso
para nada.
Então, vamos adicionar mais alguns métodos de comportamento ao nosso script de IA e criar árvores de
comportamento para eles.
Então, vamos abrir a IA para
começar e vamos adicionar mais algumas tarefas.
Vou colocá-los no
final para garantir a consistência, realmente não importa em que ordem eles estão.
Então, queremos tornar o bot inteligente o suficiente para que ele saiba fugir quando estiver com problemas e
ele estará com problemas (obviamente) quando sua saúde estiver baixa, mas também permanecerá com problemas se o jogador estiver atrás dele ou
se o jogador estiver perto o suficiente.
Por isso, queremos poder testar essas condições e configurá-las para fugir.
Abaixo, vamos adicionar esses métodos no.
Primeiro de tudo, eu tenho um método chamado 'IsHealthLessThan' e ele aceita um valor flutuante de 'saúde'.
Essa não é a integridade armazenada na classe do agente.
Essa é a saúde pela qual passaremos pela Árvore de Comportamentos e a testaremos
contra a saúde do agente.
Ele retornará 'true' se a saúde do agente for menor que o valor que está sendo passado.
Portanto, temos essa variável que podemos colocar na Árvore de comportamentos para alterar o comportamento
do agente.
Está bem.
Portanto, você pode ter certeza de que não deseja fugir do perigo, a menos que a saúde esteja com 20 anos ou
que você queira que ele fuja do perigo quando a saúde estiver com 80, dependendo de quão sensível ela é
e então você pode tem diferentes para diferentes tipos de agentes.
Agora, além de verificar a saúde, também testaremos se o bot está em perigo
ou não e o 'InDanger' aqui está fazendo uma coisa semelhante, em que
está
assumindo um valor proveniente da Árvore de Comportamento por meio desse flutuador 'minDist' e testaremos a distância entre
o jogador e o agente e, se essa distância for menor que o minDist, estará em perigo, ainda estará ao alcance do jogador.
Por fim, temos outro método chamado 'TakeCover' e o que o TakeCover fará é descobrir 'se afastar do player' e essa
é a
mesma lógica (o mesmo cálculo vetorial) que usamos na fuga da multidão, onde obtemos um vetor NÃO
PARA o jogador, mas LONGE do jogador, e
depois o adicionamos à posição atual do agente e notamos que estou multiplicando por 2.
Portanto, ele ficará duas vezes mais longe do player do que atualmente.
Depois que tivermos um novo destino, podemos definir o destino do
agente aqui e, como você pode suspeitar, usaremos o método MoveToDestination que escrevemos há pouco tempo e chamaremos
isso para realmente fazer com que o agente se mova.
Então essa é a sua IA, salve isso.
Agora voltaremos ao Unity e criaremos um novo script. Então, vou duplicar o script Wander
e vamos chamá-lo de Flee. BT. Abra isso e vou adicioná-lo à minha coleção de scripts que estou recebendo.
Agora, aqui, testaremos se a saúde está baixa e testaremos se
estamos dentro de um determinado raio de perigo e também colocaremos em nossa 'sequência' que
precisamos TakeCover e depois MoveToDestination.
Então, será algo parecido com isto.
'enquanto IsHealthLessThan (40. 0) ', neste
caso e também' enquanto InDanger (50. 0) ', então ainda estamos a 50
distância do jogador, a' sequência 'será executada para' TakeCover 'e' MoveToDestination '.
Guarde isso e vamos ver como ele se comporta.
Então, eu vou selecionar o agente e dar o novo script de Flee ... arraste-o e solte-o no seu comportamento do Panda, pressione Play e,
em seguida, você terá que ir até o agente e começar a dispará-lo para ativar o script, porque você precisa estar perto dele
e sua saúde precisa ser menor que 40. Então, enquanto você estiver fazendo isso,
se ficar de olho no script, verá quando ele será acionado.
Agora, enquanto o script permanecer abaixo de 40 para a saúde, você pode continuar ativando-o mantendo-o próximo e seguindo-o e
descobrirá que o próprio comportamento está fazendo com que ele se afaste de você.
Quando atingir mais de 40 novamente à medida que desaparece, a coisa toda vai parar porque
você está negando essa declaração while aqui e, portanto, não pode continuar.
Portanto, você teria que atirar nele novamente para fazer a saúde ficar abaixo de 40, para fazer com que essa árvore
aconteça novamente.
Agora, é tudo o que esse agente está fazendo, não vai se voltar e atacar você de volta,
porque você não conseguiu isso nesse script em particular.
Outra coisa para a qual podemos usar nosso método IsHealthLessThan é testar se nosso bot morreu e para isso
precisamos de outro script de comportamento.
Então, novamente, eu vou copiar o Wander e vamos chamar isso de
Morto. BT
e, em vez de uma 'sequência', teremos um 'enquanto IsHealthLessThan (0. 1) ', que é uma saúde muito, muito
mínima.
Nesse caso, nosso bot estará morto.
Então, o que fazemos quando está morto? Vamos explodir.
'Explodir' não é um método que acompanha a árvore de comportamento e é algo que você precisa escrever para si mesmo.
Então, vamos salvar isso e voltar ao nosso script de IA e adicionar um método 'Explodir'.
Vamos fazer isso lá embaixo.
Então... 'Explodir'... tudo o que você fará é destruir o objeto de jogo healthBar e, em seguida, destruir
o objeto de jogo do próprio agente (e, em seguida, ele será retirado do jogo). Se você quiser um sistema de partículas
com efeito de explosão, adicione-o aqui.
Novamente, este é um método de retorno de booleano com retorno de 'true' e não há razão para que isso não possa ser usado
como um 'vazio' com uma Tarefa. atual. Tenha sucesso, a menos que em algum lugar
da sua árvore você queira testar se a explosão ocorreu e depois lidar com isso dessa maneira.
Ok, então salve isso, volte para o Unity, pegue seu script 'Dead' e você deseja anexá-lo como
a Árvore de Comportamento para o seu Droid. Vamos colocá-lo lá e depois pressionaremos Play e vamos atirar até que sua
saúde diminua para 0 para testá-lo. Então... atirar e depois se foi.
Então essa foi a explosão.
Todas as árvores de comportamento que criamos são muito boas, mas quando elas realmente entram em cena é
quando as reunimos e criamos uma árvore de comportamento muito mais complexa para
representar todo o comportamento de nosso agente e nós ' Farei isso na próxima palestra.