O comportamento de perseguição é um pouco como Sikh, exceto que ao invés de seguir um alvo, o agente
prevê onde o alvo estará no futuro a fim de interceptá-lo.
Vemos isso ocorrer o tempo todo em jogos esportivos, no caso do futebol.
A bola real fornece aos jogadores a posição futura prevista de seu oponente.
Agora, a fim de determinar o local para o qual nosso perseguidor deve ir, precisamos obter
a posição do alvo na direção da viagem e da velocidade.
Também precisamos da velocidade do perseguidor e de sua distância até o alvo, pois eles vão depender da rapidez com que o ladrão
conseguir alcançar o alvo.
Podemos então prever para onde o perseguidor deve ir com base nesses valores e calcular a
distância que o perseguidor deve apontar como a distância entre o perseguidor e o alvo dividida pela
adição das velocidades de ambos os agentes.
Portanto, vamos em frente e implementemos isto em nosso roteiro bot.
Portanto, abra seu código bot e nós vamos colocar a perseguição sob a FLI aqui embaixo.
Portanto, a busca terá, obviamente, seu próprio método.
Portanto, evite perseguir.
E dentro daqui, o que vamos fazer é, antes de mais nada, trabalhar o vetor para o alvo.
Portanto, vetor três, di. alvo.
Ah, então a direção é a posição do ponto de transformação do alvo menos esta posição do ponto de transformação.
Agora, quando tivermos isso, podemos realmente ir em frente e calcular o olhar para o futuro.
Então, até onde vamos olhar para a frente, além da direção para a frente do alvo?
Portanto, olhe para o futuro.
E é aqui que estamos prevendo a futura localização.
Portanto, será o alvo di r ponto magnitude.
E vamos dividir isso pela velocidade do agente.
Portanto, a velocidade do agente mais a velocidade do acionamento que está acontecendo no copo.
Para fazer isso, serão os pontos-alvo obter componente para o roteiro de acionamento.
E lembre-se que criamos essa velocidade atual ou eu criei e a coloquei lá e mostrei a você mais cedo onde
estamos atualizando a velocidade real e a tornamos um valor público para que você pudesse acessá-la de
volta no drive script.
Ok, então isso é olhar para o futuro.
E então o que vamos fazer para isso é realmente procurar.
Portanto, buscaremos o alvo.
Posição do ponto de transformação.
Mais o olhar em frente, mas o olhar em frente vamos usar como um multiplicador contra o vetor de avanço dos
alvos.
Portanto, o vetor de avanço é a forma como o alvo está de frente e viajando de ponto para frente.
E tem um comprimento de um, por isso é automaticamente normalizado para nós.
Portanto, multiplicando isso por olhar para o futuro nos dá um vetor que é o comprimento do olhar para o futuro
e, portanto, estamos acrescentando isso à busca.
Muito bem, então já temos isso agora.
Tudo o que precisamos fazer com ele é entrar em atualização e apenas mudar isso para prosseguir.
Para que possamos executá-lo.
Ok, então vamos guardar isso e vamos voltar à unidade e vamos brincar com a imprensa.
Certo.
Assim você pode ver que ele está vindo para a polícia.
Nós movemos o policial.
E se mudarmos de direção, você verá que ele estará então prevendo a direção futura.
Depois, apenas cegamente.
A seguir.
Acho que você pode ver o quanto ele está olhando para o futuro.
Nesse caso.
Agora, quanto mais rápido eles estiverem indo, mais adiante isso vai acontecer.
Agora, se você quiser forçar esse olhar para frente um pouco mais do que realmente é, que você não pode realmente
vê-lo lá.
Vamos voltar ao nosso código e podemos multiplicá-lo ainda mais.
Portanto, na verdade, é mais do que olhar para o futuro.
Vamos multiplicar isso por cinco só para dar um olhar realmente bom e forte para o futuro, eu acho.
Vamos voltar atrás e pressionar o jogo.
Agora o que você vai encontrar é que ele vai olhar para o futuro.
Agora, meu bot não vai nem mesmo neste ponto, mas quando você começar a adicionar.
Uma velocidade.
Para olhar para o futuro.
Vamos andando.
Dê a volta.
E lá vai você.
Então, agora o cálculo para o futuro se tornou bastante grande.
Portanto, é a velocidade que estava indo nesta direção.
E os bots acabaram ali, em algum lugar bem na borda do mapa.
Entretanto, se isso estiver acontecendo, o que não deveria acontecer, pois você não está
realmente destinado a multiplicar esse olhar para o futuro, você poderia consertá-lo colocando em outra condição para testar se seu policial,
seu alvo parou de se mover, caso em que você entraria em uma busca em seu lugar.
Essa é uma das condições extras que você poderia acrescentar a essa busca.
E o que faremos também é melhorar isto, acrescentando algumas outras condições que lidam com se você deve estar procurando
ou se realmente deve estar olhando para o futuro.
Primeiro.
Naturalmente, uma condição que consideraremos é que, se o alvo parou de se mover, então transformaremos
a perseguição em uma busca e nos dirigiremos diretamente para o alvo.
A próxima condição que vamos considerar é que se o assaltante estiver na frente do policial e praticamente
já estiver indo na mesma direção, então o assaltante deve dar a volta e apenas procurar o policial.
Então como determinar se o assaltante está na frente do policial?
Bem, nós usamos ângulos e usamos os ângulos entre os vários vetores que já estamos usando.
Quando o ladrão está na frente do policial, o ângulo entre o vetor de avanço do ladrão
e o vetor, o policial será maior que 90 graus quando o ladrão estiver atrás do policial.
O ângulo vai ser inferior a 90 graus.
Agora, se o assaltante estiver na frente do policial, ele já pode ter se virado para ir em direção ao ponto de interceptação.
Se este for o caso, não queremos que ele procure.
Ao invés disso, temos que restringir nossas condições para buscar ainda mais, considerando o ângulo entre
as duas direções de avanço dos agentes.
E se isto for bastante pequeno, então permitiremos que a busca se transforme em uma busca.
Portanto, vamos em frente e acrescentemos, nestas condições, o método de busca.
Portanto, o primeiro que temos é se o alvo parou de se mover, para que possamos testar se a velocidade que é esta aqui, deixe-me
apenas copiar isso.
Se a velocidade for inferior a 0. 01 F e estou dizendo isso em vez de dizer igual a zero, porque às vezes você pode obter um erro
flutuante com valores zero e ele pode não ser realmente igual a zero.
Pode ser um número muito, muito pequeno.
Assim, ao fazer isso, você está se cobrindo que se estamos praticamente parados, então
o que vamos fazer aqui dentro é procurar.
Portanto, vamos apenas buscar o alvo.
Assim, o ponto alvo transforma a posição.
E então também vamos voltar em vez de continuar com este método.
Agora, as outras coisas para as quais queremos testar é o cabeçalho relativo do agente.
Portanto, se tivermos um pequeno, pequeno ângulo entre as direções de avanço dos agentes, então vamos apenas fazer
com que nosso agente siga ou procure o alvo em vez de olhar para frente.
Portanto, precisamos calcular esse ângulo específico.
Portanto, vamos flutuar em direção relativa, vamos chamá-lo igual ao ângulo de três pontos do vetor.
E esse ângulo será entre este ponto transformado para frente e queremos obter o vetor de avanço
do policial ou do alvo.
Agora temos que obter o vetor dianteiro em relação ao agente real, o que significa que precisamos
traduzir esse vetor, que é a direção dianteira do alvo para o espaço do agente.
O que isso significa essencialmente é que você está fazendo desse agente o ponto de origem de seu próprio pequeno conjunto
de coordenadas cartesianas e, em seguida, projetando o vetor de avanço do alvo para isso.
Portanto, na verdade é bastante fácil de fazer.
Você recebe a transformação.
Portanto, este ponto de tendência forma ponto e tem seu próprio método de transformação vetorial.
E o vetor que você quer transformar é o alvo.
Transformar ponto para frente dessa maneira.
Portanto, basta colocá-los no mesmo espaço, no mesmo espaço relativo.
Portanto, esse é o seu ângulo entre as direções para frente.
Agora também queremos obter o ângulo entre a direção de avanço do agente e a direção para
o alvo.
Portanto, isso será flutuar para o alvo igual ao ângulo de três pontos do vetor.
E mais uma vez, é este ponto transformado para frente.
E mais uma vez, precisamos fazer um vetor transformador de pontos.
E o vetor, neste caso, é o veado alvo, que calculamos pouco antes.
Certo.
Portanto, agora que temos esses dois ângulos, podemos colocá-los também em nossa declaração.
Portanto, vamos colocá-los aqui e será para o alvo e veremos se é maior que 90 e
nosso rumo relativo é inferior a 20 graus e nós o faremos ou isso com a velocidade do alvo.
Portanto, estas são as nossas condições nas quais realmente realizaremos uma busca em seu lugar.
Ok, então vamos guardar isso e vamos voltar ao jogo da Unity Press e experimentar.
Agora por causa das velocidades e ângulos reais desses caras, é realmente difícil ver se
ele está procurando ou se, de fato, ele está olhando para frente.
Mas ele está, acredite em mim.
E faz toda a diferença que você tenha estes cálculos corretos quando você avança para outros comportamentos
que na verdade são baseados na perseguição.