Ser capaz de calcular a linha de visão entre um olho e seu alvo ou quem o persegue é uma boa habilidade
para ter programado nele como um comportamento.
Faz com que pareça um pouco mais real se pensa que está sendo observado de fato.
E já cobrimos isso antes quando estávamos fazendo nossas máquinas de estado finito e perseguindo
a UG nesse mapa.
Agora, deixei como um desafio para você na última palestra para realmente colocar isto no código
que você já tem para o assaltante.
Portanto, antes de tudo, vamos dar uma olhada e nos lembrar dos ângulos que estão envolvidos.
Há, é claro, um vetor em direção ao policial do assaltante, e depois há o vetor de avanço dos assaltantes.
E é este ângulo aqui que queremos verificar, se é suficientemente pequeno para que possamos considerar que
ele possa vê-lo.
Se for um ângulo muito grande, então o assaltante estará realmente olhando na outra direção.
Portanto, se ele estiver olhando para aqui, o ângulo de lá para cá será muito maior do que se
ele estiver olhando para este lado.
E o ângulo entre aqui e ali é obviamente bastante pequeno.
Então podemos usar isso como uma comparação para dizer, bem, ele pode ver o policial se ele estiver em uma determinada faixa.
Então, você conseguiu fazer isso funcionar quando o colocou dentro?
Vamos analisar o código e começar agora.
Certo.
Portanto, abra seu roteiro bot e vamos colocar isto na lata de ver o alvo.
Portanto, é bastante simples porque já temos um pouco da matemática feita.
A única coisa que precisamos fazer é calcular realmente o ângulo.
Portanto, queremos calcular o ângulo entre o vetor de avanço do agente e a direção para o alvo.
Agora já temos o vetor para o alvo ou a direção para etiquetar, que é nosso raio para o alvo que estamos
usando para nosso ancinho.
Portanto, podemos simplesmente usar isso em nosso cálculo angular.
Portanto, o ângulo de flutuação.
É igual a três ângulos da vítima e que calculará o ângulo entre este transformador de ponto para frente
e o raio para o alvo.
Certo.
Assim, uma vez que tivermos isso, podemos testar isso com algum ângulo particular.
Portanto, se colocarmos isso em nossa declaração, colocaremos um ângulo de visão e queremos que seja
inferior a, digamos, 60 graus e fazemos um raker.
Portanto, se o ângulo for inferior a 60 graus, estamos olhando na direção certa e podemos fazer um raio na direção
do policial para que o policial, porque lembre-se, podemos estar olhando na direção certa do policial, mas ele
pode estar do outro lado do edifício.
Isso significa que este raio também vai falhar.
Então, tudo bem, nós temos isso, salve isso.
Agora, vamos lá e verificar isso.
Assim, com ele atualmente voltado na direção certa, se pressionarmos o jogo, espera-se que ele vá e se
esconda.
Sim.
Então ele diz: "Olha, polícia em cima de mim, eu vou me esconder".
Está bem?
Então agora vamos dar-lhe a volta por este caminho.
Portanto, ele não está olhando para o policial e nós podemos pressionar o jogo e agora ele não está nada perturbado.
Podemos subir aqui e ele não pode ver o policial, mas se o policial passar por ele e se tornar em seu
alcance visual, então ele vai fugir.
Agora ele está se escondendo atrás da árvore, mas olhando para a outra direção.
Mas se chegarmos à frente, ele dará meia volta e voltará aqui.
Muito bem, ótimo.
Podemos até mesmo acrescentar mais a esta dinâmica na medida em que poderíamos programar se o policial pode ver o ladrão.
Então o ladrão, ele pode estar olhando para o policial ou o policial pode estar olhando na outra direção.
Então é como, Oh, ele não pode me ver ou não está olhando para mim, então eu não tenho que fazer nada certo.
Portanto, este é seu próximo desafio.
O que eu gostaria que você fizesse na classe é vir até aqui e vamos criar um touro que possa me ver.
Então este é meu inimigo pode me ver retornar?
Verdadeiro, se podem e falso, se não podem.
Mais uma vez, use o ângulo de visão de 60.
Portanto, a matemática vai ser bastante semelhante ao que está acontecendo aqui.
Portanto, sim, tente.
E quando voltarmos, eu passarei por isso com você.
Bem-vindo de volta.
Como você reagiu a isso?
Bem, como eu disse, os cálculos são praticamente os mesmos que já tivemos antes.
Portanto, vamos pegar este código.
Portanto, isto agora está recebendo a direção.
Isto é obter a direção do ladrão, que é esta posição transformada para o policial.
Agora, neste caso, gostaríamos de trabalhar qual é o outro ângulo.
Portanto, vamos realmente trocar isto e obter o vetor que vai na outra direção, assim.
Certo.
Assim, podemos trabalhar o ângulo como fizemos antes de usá-lo.
Podemos usar isto aqui.
Agora, a ordem em encontrar o ângulo não vai importar neste caso.
Vai lhe dar o mesmo tipo de cálculo, exceto que isto ainda está calculando o ângulo entre
o ladrão e a taxa do alvo, o que é incorreto, pois na verdade queremos trabalhar isso com base
na direção de frente do policial.
Portanto, esta seria a transformação do alvo para frente.
Certo.
Agora, uma vez que tenhamos isso, podemos então fazer um teste.
Portanto, se o ângulo de visão ou de visão for inferior a 60, então voltaremos a ser verdadeiros.
Caso contrário, o retorno será falso.
Pronto, então já fizemos isso.
Agora temos que incorporá-lo à nossa atualização aqui embaixo.
Portanto, vamos torná-lo um pouco mais complexo aqui embaixo.
No que diz respeito à ocultação, vamos dizer algo como se pudéssemos ver.
Alvo e pode me ver, então faremos um esconderijo inteligente.
Caso contrário, vamos perseguir a polícia para que a polícia não olhe.
Faremos uma perseguição como essa.
Pronto, com isso feito, salve-o e vamos voltar e testá-lo.
Então, de volta à Unidade, vamos pressionar o jogo e inicialmente o ladrão vai dar a volta, perseguir o policial e ir, oh não,
oh não, não pode fazer isso.
Então ele vai entre esconder-se e ir com o policial para não poder perseguir o policial e se esconder o tempo todo.
Se o policial se mudar para cá, vai persegui-lo porque não está olhando para ele, mas se ele se virar pode fazer
com que ele vá embora.
Mas ele só vai embora por um segundo porque, assim que se vira, esquece que viu
o policial e isso não vai funcionar.
Portanto, vamos acrescentar um pouco mais.
Vamos colocar um pequeno período de arrefecimento e eu vou colocar isso aqui em cima.
Vou colocar um touro para esfriar é igual a falso.
E você provavelmente deveria colocar isto no topo de seu programa.
Mas como estamos aqui em baixo e você pode ver, é só ali.
Então queremos um comportamento vazio, esfriar a cabeça.
E o que isso vai fazer é colocar o cooldown em pé de igualdade com o false.
Agora o cooldown vai se tornar realidade quando tivermos começado a correr um esconderijo inteligente, então aqui embaixo vai se refrescar.
Igualmente verdadeiro, o que vai desencadear isso em um minuto.
Mostrarei a você onde isso fica.
E então, uma vez que fazemos isso, podemos ir evocar o comportamento, esfriar.
Então, isso irá disparar em, digamos, 5 segundos.
Portanto, dê-me 5 segundos para continuar escondido e então isto voltará a ser falso, o que permitirá que este código funcione
assim que colocarmos estas próximas linhas de lógica.
Portanto, aqui dentro colocaremos se não estivermos resfriando, porque se estivermos resfriando, estamos no
meio de uma tentativa de ir e fazer um esconderijo inteligente e nos esconder atrás de algo de outra forma.
Assim.
Está bem.
Certo.
Portanto, economize isso.
Vamos voltar à Unidade e conferir.
Então, desta vez, quando ele se vira e vai, olha, tem um policial.
Ele irá e se esconderá imediatamente.
Veja.
Sim.
5 segundos.
Eu vou me esconder atrás desta árvore.
Eu poderia esquecer que o policial está lá e voltar e dar uma olhada.
Se ele está lá, ele ainda está lá.
Eu vou me esconder novamente.
O policial não parece desta vez.
E quando o assaltante volta, ele vai, Oh, ele não está observando.
Eu vou me esgueirar atrás dele.
Sim, ótimo.
Portanto, está funcionando muito bem.
Portanto, há tantas coisas diferentes que você pode fazer agora que você tem estes comportamentos básicos de busca implementados com
estes pequenos bots muito simples na malha de navegação.
Divirta-se muito com eles.
Espero que tenham gostado desta seção.
Há obviamente diferentes dinâmicas na mecânica dos jogos que você pode implementar com isto.
E sim, já terminamos com esta seção.