Certo.
Até agora, passamos muito tempo codificando e não muito tempo sendo desafiados, exceto para seguir o código e implementá-lo,
é claro, mas nada onde você meio que tenha sido capaz de ampliar seus conhecimentos.
Portanto, todo este vídeo é dedicado a um desafio que eu gostaria de mostrar a vocês que eu montei.
Muito bem.
Portanto, eu tenho meu caráter.
Deixe-me apenas afastar meu personagem de jogador para que ele não comece a atirar imediatamente, porque isso só
fica irritante.
Muito bem, então vamos brincar com a imprensa e eu lhe mostrarei o que isto faz.
Por isso, criei um cubo no ambiente que está lá.
Agora, este cubo é um local seguro e eu o tenho marcado com seguro como um f e em letras maiúsculas.
Agora o que acontece é que a ARG ainda vai fazer exatamente o que fazia antes, exceto que agora podemos
nos esgueirar atrás dele e dar-lhe um susto.
Portanto, se chegarmos a um ângulo, ângulo de visão ou a um ângulo de visão negativo de 30 e a uma distância de dois, basicamente
está indo à toa.
E lá vai ele.
Ele correrá para aquele cubo onde agora está a salvo e então voltará e continuará em sua patrulha enquanto você não estiver suficientemente
perto.
Portanto, vamos ver se podemos assustá-lo novamente.
Nós subiremos por aqui.
E entre no circuito deles.
Assustou-o.
Ele volta para o cubo.
Agora eu acho que se ficarmos aqui e ele se virar, ele virá e atirará em nós dessa maneira.
Certo.
Assim, esse comportamento ainda está lá também.
Muito bem.
Então é basicamente isso que eu quero que você faça.
Quero que você acrescente em estado de fuga ao nosso código e que fuja para um local seguro, que é este cubo.
Então aí está o cubo.
E como eu disse antes, a etiqueta para ele é segura.
Certo.
Tão grande desafio.
Pausa o vídeo agora.
Vá até lá.
E quando voltarmos, eu vou passar por isso com você.
A primeira coisa que você precisa fazer para que isto funcione é criar seu cubo ou seu lugar seguro.
Não importa o que seja.
Ele só precisa ser um objeto de jogo que tenha uma posição nele e aquela posição que você
vai usar como um destino definido para seu agente.
Agora, é muito importante que você marque isto com algo para que você possa identificá-lo.
Então, no inspetor, o que eu fiz com este cubo em particular foi entrar em tags e criei uma chamada
Safe with a Capital S e a selecionei para ter certeza de que essa é minha localização segura.
E você pode colocar isso em qualquer lugar do mapa que quiser.
Agora o resto da funcionalidade tudo acontece dentro do arquivo de estado.
Portanto, abra este arquivo de código de estado.
E o que eu fiz foi, antes de tudo, no topo com os estados, nosso enumero, acrescentei em um chamado fugir porque
é isso que vamos fazer essencialmente fugir.
Agora voltando aqui onde estamos fazendo um jogador de lata C e atacando entre aqueles
que eu adicionei em um novo método que vai determinar se o jogador está atrás do NPC a uma distância inferior
a dois e a um ângulo de 30.
Ou pelo menos isso seria um ângulo de 60 porque é calculado apenas pela metade.
Assim, obtemos a direção.
Agora a direção, desta vez, será a inversa.
E se você tiver uma olhada aqui em baixo pode atacar o jogador, a direção é do NPC para o jogador.
Desta vez estou calculando um vetor diferente que é do jogador para o NPC para que quando obtivermos o ângulo,
estejamos calculando esse ângulo com base na parte de trás do personagem, não na frente.
Portanto, o ângulo em si, o cálculo para isso é o mesmo que usamos antes, aqui em cima.
E a única diferença é que temos este vetor de direção voltado para a outra direção.
Depois verificamos se a magnitude é inferior a dois e o ângulo é inferior a 30 e depois voltamos.
É verdade, isso significa que estamos por trás do personagem, caso contrário, retornaremos falsos.
Por isso, vamos usar este é o jogador por trás.
Agora vamos acionar isso dentro da patrulha.
Portanto, se formos até onde está a patrulha e dermos uma olhada na atualização, poderemos ver onde isso
é adicionado aqui.
Por isso, por baixo do jogador que vamos testar, está o jogador por trás do NPC.
Se for, mudará então o próximo estado para fugir, o que ainda temos que escrever e depois
sair.
Então, como é fugir?
Porque é o que está fazendo toda essa funcionalidade agora.
É bem no fundo do meu código e é realmente bastante simples e curto.
Assim, no local seguro, criei um objeto de jogo no topo.
Agora o que você poderia ter feito, o que provavelmente seria um pouco melhor do que o que eu fiz,
é colocar o local seguro em seu ambiente de jogo.
Singleton E instale-o lá dentro.
Portanto, está sempre disponível.
Agora isso será menos um dreno no processamento do que conseguir aquele local seguro com o objeto de busca
com tag cada vez que você tiver que fugir.
Então faça isso se quiser.
Mas eu o fiz desta maneira agora dentro da configuração para a fuga real em sua construção, nós o nomeamos, e então
definimos o objeto de jogo de localização segura para encontrar o objeto de jogo que tem segurança sobre ele.
Agora poderia ter sido uma árvore.
Mesmo nesse ambiente, não importa o que seja.
Precisamos apenas de uma posição vetorial três para a qual nosso agente possa correr.
Agora temos nossa atualização e nossa saída e eles são realmente muito curtos.
Vamos ter um visual muito parecido com o que já tivemos antes.
Assim, o anim está pronto para rodar.
Eu decidi que ele vai fugir.
Deve-se usar a animação de execução onde então o agente será parado para falso para que possamos criar um
caminho para ele.
A velocidade que eu defini para seis, por isso é um pouco mais rápida do que ele estava correndo na sua direção antes.
E então na mesma entrada estamos fazendo um destino definido para nossa localização segura, posição ponto transform ponto.
Agora a razão pela qual eu coloquei isto no enter em vez de dentro da atualização, se você se lembra que eu falei em definir
um destino e então o jogo precisava passar por todo um loop de atualização antes que esse
caminho fosse calculado.
Colocá-lo em enter vai fazer isso para você porque não será até o próximo loop de jogo
ou a próxima atualização que voltaremos e faremos a atualização que está no estado, o que significa que até lá teremos
nosso caminho calculado e poderemos então testar para a distância restante.
Agora a distância restante neste caso é inferior a uma.
Assim, quando o NPC atingir praticamente o topo daquele cubo, vamos voltar ao estado ocioso e lembrar que
o estado ocioso então tem 10% de chance de entrar em patrulha, o que ele faz muito rapidamente,
e é praticamente isso.
Assim, agora você pode ver o poder de criar estas máquinas de estado finito e a classe de estado.
E desde que você tenha sua atualização e seu código de saída, cuidando das transições entre os estados, isso
torna muito fácil continuar adicionando mais e mais comportamentos para um NPC.
Portanto, é um conceito muito poderoso.