Muito bem.
Portanto, agora, a atualização.
Vamos nos livrar da base.
Você não vai precisar disso novamente.
Primeiro de tudo, precisamos calcular a direção para o jogador e o ângulo porque queremos
girar o NPC.
Então, eles estão atirando na direção do jogador.
Caso contrário, vai parecer um pouco estranho.
Portanto, este vai ser um vetor três.
Queremos direção igual à posição do jogador menos a posição da transformadora NPC.
Então vamos obter nosso ângulo de flutuação igual ao vetor.
Três ângulos de pontos é o mesmo código que já escrevemos anteriormente para encontrar o ângulo, a direção e o ponto
de transformação NPC para frente.
E uma vez que tenhamos essa direção, o que vamos fazer com ela é definir o porquê de ela ser direção zero
y igual a zero.
Agora, por que estou fazendo isso?
Porque queremos girar o personagem ao redor, mas não queremos que o personagem se incline nos eixos X ou Z
de forma alguma.
Queremos apenas que ele gire no local que está em torno de seu vetor ascendente.
Portanto, temos que ter certeza de que qualquer diferença entre o jogador e o próprio NPC é zero no
que diz respeito à altura.
Agora, para fazer a rotação, vamos usar um retorno.
Portanto, a rotação dos pontos da transformada NPC é igual à rotação dos pontos no deslizamento dos pontos.
Portanto, vamos fazer um looping esférico entre dois ângulos.
Portanto, a rotação dos pontos de transformação da NPC, é a rotação da corrente.
E depois, colocamos um retorno.
Não olhar a rotação na direção que acabamos de calcular, que é o vetor em direção ao jogador e queremos
girar isso usando nossa velocidade.
Assim, isso será cronometrado no tempo Delta multiplicado pela velocidade de rotação.
Certo.
Isso vai fazer com que seu NPC gire ao redor para estar sempre enfrentando o jogador enquanto ele está atacando.
Agora, lembre-se, precisamos de uma maneira de sair da atualização.
Então, quando vamos parar de atacar o jogador?
Bem, se não podemos ver o jogador ou se realmente não podemos mais atacá-lo, então o jogador
saiu do alcance, então nós seremos os próximos.
Estado.
Igual a New Idol e.
Agente.
Jogador de Adão.
Você poderia voltar para qualquer estado daqui, então você poderia voltar para o estado de perseguição ou você poderia
voltar para o estado de patrulha.
Depende de você como você quer que isto funcione.
A razão pela qual estou fazendo isto é que, se você esteve ocioso, ocioso na verdade o deixará chegar a qualquer outro
estado.
Se você esperar o suficiente e não tiver que esperar o suficiente, porque o que vai acontecer
neste caso é que, se você sair do alcance, ele vai parar de atirar em você, o que o levará de volta para o estado de inatividade.
Então haverá uma chance de 10% de você entrar no estado de patrulha e então é o estado de patrulha que determinará
se ele pode ver o jogador e depois pode caminhar em direção ao jogador e depois atacar o jogador.
Por isso, é como se estivesse em um ciclo completo para voltar novamente.
E isso significa que se você correr rápido o suficiente e sair do alcance do NPC, então ele só vai esquecer de você
e vai ficar ocioso de qualquer forma e depois voltar para a patrulha.
Ok, então isso é o que temos que fazer para sair da atualização e só precisamos ir para o palco igualar a saída do evento para garantir que
isso aconteça.
E depois terminar com esse suporte.
Então, descemos para a saída e teremos algumas coisas habituais como já fizemos antes com
Adam.
Reinicialização.
O gatilho quatro está disparando.
E depois atire.
Não pare.
Portanto, esse é praticamente o código para o ataque e também para a perseguição.
O que ainda não temos é uma maneira de acionar esses estados desde o início.
Por isso, vamos até o topo de nosso ídolo e vamos entrar na atualização e definir para que, se o
jogador se tornar visível, comecemos a persegui-los.
Muito bem, então vamos descer aqui e vamos fazer isso.
Na verdade, vou fazer isso acima.
Faremos deste um outro, se for por isso.
E então iremos acima aqui e colocaremos se.
Você pode ver Playa.
O próximo estado é igual a novas perseguições.
E P. S..
Agente Adam e jogador.
E depois o palco.
Igual a ponto de evento.
Saída.
Portanto, vamos diretamente à perseguição e também podemos, na patrulha, usar exatamente o mesmo se a declaração for feita.
Portanto, se estivermos patrulhando e virmos que o jogador vai parar e começar a perseguir.
Então, copie isso e vamos descer em patrulha e vamos colocar isso dentro da atualização.
Coloquemos isso aqui depois.
Desde que esteja na atualização e seja executada em algum momento e depois mude para o novo
estado, o que requer estas duas linhas.
É claro que estaremos bem.
Agora sabemos que se você já está em perseguição e se aproxima o suficiente, então isso desencadeará o ataque.
Portanto, não vamos entrar diretamente em ataque.
Vamos dar um seguimento.
Agora, mesmo que de repente você se aproxime muito dele e ele possa atacá-lo diretamente,
ele irá através da perseguição e não lhe custará muito mais para fazer isso de qualquer maneira.
Certo.
Portanto, temos que salvar isso.
Agora vamos voltar e pouco antes de experimentarmos isto, se você selecionar, eu posso ir para o código I.
Nós temos este personagem PHP que colocamos lá, mas este personagem não está realmente onde nosso verdadeiro
personagem está.
É uma espécie de agarramento ao nosso caráter.
O caráter é basicamente definido por esta cápsula, portanto estamos mais interessados em que ele possa ver
esta cápsula em seu alcance e distância visíveis.
Então eu apenas entendo isso e o mudo em seu código.
Então está olhando para isso em vez disso, certo?
Então, vamos brincar com a imprensa.
E talvez já estejamos no seu alcance visual.
Sim, nós somos.
Então ele vai começar a atirar em nós assim.
Agora, se você segurar o turno e se vir, você deve ser capaz de fugir o suficiente.
E então, se conseguirmos contornar estas árvores, se eu continuar colidindo atrás de mim você vai, ele
perderá o interesse e voltará a patrulhar.
Portanto, neste momento, devemos ser capazes de nos esgueirar atrás dele.
Certo.
Vamos apenas mostrar-lhe outra coisa aqui.
Por isso, se eu passar por ele e voltar a me meter na cara dele, ele vai começar a me perseguir novamente.
Desça para fugir.
Eventualmente, ele vai perder o interesse.
E voltar.
Agora, se o seguirmos e dermos uma olhada, o que acontece é que ele voltará diretamente para
Waypoint Zero porque está programado para criar um novo estado de patrulha a cada vez.
Portanto, isso não é particularmente realista.
Ele deve, quando terminar de nos perseguir, voltar ao ponto de passagem mais próximo e segui-lo.
Agora, isto herdará alguns problemas que você tem com o caminhar pela geometria e isso.
Mas como ele é um agente de malha de navegação e porque temos colididores e isso e o meio ambiente,
ele deve ser capaz de contorná-los.
Muito bem, então vamos parar de brincar.
Agora, o que vamos fazer é apenas atualizar nosso código para encontrar o ponto de passagem mais próximo.
Resistir.
Ok, então vamos abrir nosso código para o estado e vamos colocar isso no estado de patrulha na entrada, onde encontraremos
o mais próximo, em vez de apenas usar zero.
Portanto, vamos nos livrar deste índice atual e, em vez disso, vamos descobri-lo.
Primeiro de tudo, precisamos de um flutuador para armazenar na distância que estamos calculando entre cada um
dos waypoints e o NPC e para lembrar a menor distância.
Portanto, começaremos com um carro alegórico chamado de último e vamos colocá-lo em algo muito grande e muito
grande significa infinito.
Você não pode ficar muito maior do que isso, de modo que cada outra distância com a qual comparamos para começar,
terá que ser menor.
Muito bem, agora precisamos para int i igual a zero.
Eu sou menos do que e aí vem o nosso fantástico singleton.
Os pontos de verificação de pontos não contam.
I plus plus.
Portanto, este é o nosso laço que vamos dar a volta a todos eles e, em seguida, vamos conseguir o singleton.
Portanto, objeto de jogo.
Este ponto é igual.
Ambiente de jogo.
Ponto único.
Pontos de verificação de pontos.
I.
Em seguida, trabalhamos a distância.
Portanto, a distância de flutuação é igual à distância vetorial de três pontos entre a posição transformada do ponto NPC e esta posição transformada
do ponto de passagem.
Estou escrevendo tudo isso em linhas separadas.
É claro, se você quiser colocá-lo em uma grande linha, tudo bem.
Mas quanto à sua legibilidade, se eu fizesse isso, você não seria capaz de ver o que estava acontecendo.
Muito bem, então agora temos nosso ponto de partida.
Temos a distância que vamos percorrer.
Se a distância que acabamos de calcular for menor do que a última distância deste modo, um ponto deve estar mais próximo.
Portanto, o índice atual vai se igualar.
E a última distância vai para a mesma distância.
Portanto, estamos nos atualizando a cada vez.
Assim, cada vez que tivermos uma distância menor, última distância, ficaremos cada vez menores
até encontrarmos aquela que queremos.
Agora, há um pequeno ajuste que eu tenho que fazer aqui para que isto funcione.
Sabemos que estamos obtendo o índice do waypoint que está mais próximo de nós, mas para onde o NPC vai se dirigir
é para aquele que está depois disso.
Agora, como posso saber isso?
Bem, na atualização, eu estou adicionando um a ele ou colocando de volta a zero antes de definir o destino.
Portanto, na verdade, temos que sentar este aqui para diminuir um ou de alguma forma dizê-lo dentro da atualização, o que vai dificultar um pouco as coisas porque
as atualizações estão constantemente circulando.
Portanto, será mais fácil aqui se formos menos um e depois, quando entrarmos para atualizar, deixar o índice atual
atualizá-lo.
Portanto, se o mais próximo é, digamos, três, então.
E nós não temos o menos.
Vai entrar aqui e acrescentar um a ele e nos dar quatro.
E por isso vamos para o caminho errado.
Portanto, precisamos disso menos um lá em cima.
Certo.
Então, basta dizer isso, para que você não use este tipo de código para encontrar sua proximidade mais próxima
a uma lista de coisas sem se livrar desta menos uma.
Muito bem, vamos brincar com a imprensa e dar uma olhada em seu comportamento agora.
Portanto, vamos ser atingidos imediatamente por causa de onde estamos.
Portanto, este é o Waypoint zero.
Onde está realmente de pé?
Vamos até aqui.
Ele deveria apenas nos seguir.
É mais fácil se eu for em frente porque estou obrigado a me deparar com algo.
Ok, então agora posso voltar rapidamente aqui até que ele perca o interesse.
Ok, então ele está andando.
Deve dar meia volta se ele não me alcançar.
Lá vamos nós.
Certo, então vamos voltar e segui-lo para ver para qual ponto ele vai primeiro.
Portanto, ele deve pegar seu ponto de passagem mais próximo, que é aquele.
E então, quando chegar lá, ele continuará em sua rota, como você acabou de ver então.
Portanto, ele não precisa voltar ao início cada vez, porque isso não faz sentido algum.
Certo.
Portanto, este é o padrão de estado em código finito.
E a IA é extremamente curta e nós somos.
Confiar totalmente nestes estados e no código nestes estados para incorporar um único estado, mas também dizer
ao NPC como se mover de um estado para outro.
Portanto, é basicamente uma vez que você tenha ido para outro estado de onde veio é completamente esquecido.
E se você precisava de um sistema que fosse assim, então você pode realmente querer manter algum tipo de ligação com
o estado anterior, o que você poderia fazer se você for para o topo aqui.
E onde temos nosso próximo estado declarado?
Temos aqui nosso próximo estado.
Você poderia ter outro que dissesse o último estado de onde você veio.
De certa forma, seria como uma lista de link duplo E onde você pode ir e voltar entre os estados se isso for
o que você precisava.
Muito bem.
Portanto, espero que você goste de aprender sobre o padrão estatal, porque eu acho que é realmente, realmente poderoso
e muito divertido de se brincar.
E você pode construir tantos sistemas diferentes com ele.
Na verdade, o sistema do Partido Republicano de que falo no meu curso usa um sistema de classe estatal muito parecido
com este.