Na palestra anterior, adicionamos um vetor aos nossos porcos e conseguimos que eles saltassem por todo o comprimento
desse vetor.
Agora vamos fazê-los avançar em direção ao local da meta.
Portanto, primeiro precisamos descobrir qual é o vetor para a localização da meta.
E a maneira como você faz isso é obter as coordenadas do objetivo e menos as coordenadas do porco a partir
disso, o que lhe dará o vetor do porco para o objetivo.
Portanto, vamos abrir nosso movimento, que é sobre os dois porcos.
Temos aqui o objetivo.
Agora vamos também calcular um vetor três, que será a direção em que vamos viajar.
Vamos nos livrar desta tradução a partir daqui e, em vez disso, vamos realmente dizer essa direção.
Igual a posição do ponto da meta transformada menos os porcos transformam a posição do ponto.
E esse é o objetivo deste código.
Portanto, transforme a posição dos pontos e isso nos dará nossa direção.
Certo.
Então, o que fazemos é realmente saltar por direção.
Portanto, se o colocarmos aqui e colocarmos que esta posição de ponto transformado é igual a esta posição de ponto transformado, e é claro que você não precisa colocar
isto aqui porque você poderia colocá-lo aqui também.
É apenas algo que sobrou de todos os meus anos de programação real.
Portanto, este ponto transforma a posição do ponto mais a direção.
Agora esta linha aqui é o mesmo que esta transformação de ponto traduzido.
Direção.
Portanto, estas duas coisas são equivalentes, mas vamos usar esta posição aqui em cima.
Certo.
Portanto, vamos guardar isso e dar uma olhada no que recebemos para que os porcos saltem para o local
da meta.
Então, vamos brincar com a imprensa.
E aí estão eles.
Portanto, ambos estão de fato em cima um do outro neste momento.
Deixe-me apenas mudá-los de lugar para que você possa ver que ambos estão naquele lugar.
Agora, geralmente quando se tem um caráter de inteligência artificial e se quer que eles se movam em direção a um local
de objetivo, eles não saltam imediatamente para lá.
Eles vão caminhando pouco a pouco por aqui.
Portanto, o que vou fazer com estes dois porcos, vou apenas movê-los para fora.
Portanto, eles estão em um local diferente um do outro dessa maneira.
Agora vamos voltar ao nosso código MOVE e vamos fazer uma atualização tardia,
porque queremos que seja a última coisa a ser calculada.
Normalmente você colocará este tipo de movimento em uma atualização tardia porque acontecerá depois de qualquer física,
coisas que estão acontecendo ou animações, e que neste caso não temos essas, mas é uma boa prática colocá-lo
em uma atualização tardia.
Então esta linha aqui que está movendo nosso porco, eu vou apenas cortar isso de lá e vamos colocá-la em nossa atualização
tardia para que ela seja repetidamente repetida.
Agora, a questão é que a primeira vez que esta corrida vai saltar o porco diretamente para o local da meta.
Mas queremos que ela dê apenas pequenos passos nessa direção, não todo o vetor de direção.
E você pode fazer isso escolhendo uma pequena parte para que você possa realmente reduzi-la, multiplicando-a
por algo assim.
0. 01 f o vetor para direção permanecerá apontando na mesma direção.
Ela apenas se torna mais curta.
Portanto, em vez de um grande salto, serão necessários muitos pequenos saltos à medida que formos avançando.
Certo, então com essa mudança feita, vamos salvar isto voltará à Unidade e haverá duas observações
aqui que você terá que considerar.
Então, vamos brincar com a imprensa.
Certo.
Então, aí estão os nossos porcos.
Agora, esta é a primeira.
Obviamente, estamos acrescentando direção ou um pequeno vetor que aponta na mesma direção que a direção.
E continua a acrescentar e continua a acrescentar e continua a acrescentar.
Por isso, na verdade, ele continua passando por ele porque não estamos dizendo quando parar agora.
De momento, tudo bem.
Outra coisa, porém, se tivermos este porco aqui, por exemplo, e depois pressionarmos o jogo, então ambos os porcos vão
alcançar o objetivo ao mesmo tempo.
Agora, o que há de errado com isso?
Bem, este porco obviamente vai ter que trabalhar muito mais, como em ir mais rápido para chegar lá, enquanto este pode
ir mais devagar.
Mas nós porque estamos nos multiplicando por 0. 01 o comprimento deste vetor em pequenos pedaços e este vetor
em pequenos pedaços, depois 0. 01 deste vetor vai ser muito mais longo que 0. 01 disto.
Portanto, ainda vai fazer 100 iterações antes de chegar ao objetivo para ambos.
Portanto, eles ainda estão fazendo a mesma quantidade de ciclos de atualização em vez de se moverem a uma velocidade consistente,
porque se estivessem a uma velocidade consistente, este porco chegaria de fato lá antes deste porco.
Ok, então como resolvemos esses dois problemas?
Vamos abordar a velocidade.
Primeiro, vamos abrir nosso código MOVE.
Agora, em vez de adicionar direção multiplicada por 0. 01, que reduz a direção para 100º de seu tamanho e, portanto,
para ambos os porcos, será um tipo diferente de vetor de comprimento.
Nós a normalizamos.
Agora, normalizar um vetor é reduzi-lo a um comprimento de um mantém a mesma direção, mas será consistentemente
um comprimento de um.
Portanto, vamos em direção normalizada e isso retornará uma versão normalizada ou um comprimento de uma direção.
Ok, então vamos apenas salvar isto.
Quando fizermos isso agora você vai descobrir que eles estarão se movendo na mesma velocidade.
Isso significa que os porcos mais próximos vão atingir esse objetivo primeiro.
Whoa.
E muito rápido.
Certo.
Por causa do comprimento de um que estamos acrescentando.
Assim, podemos realmente retardar isso um pouco.
O que eu vou fazer para torná-lo ainda mais consistente aqui é, na verdade, vamos subir e adicionar outra linha aqui
para que você tenha uma velocidade vetorial de três velocidades.
Agora a velocidade vai ser basicamente nosso vetor de direção e seu comprimento.
Portanto, vamos tomar esta direção normalizada aqui e faremos com que a velocidade seja igual a esta.
E então podemos realmente multiplicá-lo por um fator de velocidade como este.
E o fator velocidade que podemos definir no topo para desacelerar as coisas.
Muito bem, então vamos colocar aqui.
A velocidade de flutuação é igual a 0. 0 5fk.
Isso fará com que o comprimento de um seja menor, mas consistentemente menor para ambos os picos.
E então acrescentaremos a velocidade aqui.
Portanto, economize isso.
Vamos nos certificar de que eu tenha um ponto-e-vírgula nisso e vamos repetir.
Portanto, os porcos devem ser mais lentos, mas ainda se movendo no mesmo ritmo.
Certo.
E eles são.
E este porco acerta primeiro o objetivo.
E.
Isso.
Muito bem, ótimo.
Portanto, essa é a primeira coisa.
A outra coisa é tornar esta atualização mais consistente, qualquer ciclo de atualização não é uma quantidade de tempo definida neste
caso.
Certo.
Há uma atualização fixa.
Claro.
Mas queremos que estas coisas sejam consistentes e suaves.
Portanto, na verdade, também multiplicamos isto pelo tempo do ponto delta, que é a quantidade de tempo que aconteceu desde
que o último quadro foi produzido.
E isso realmente suavizará sua velocidade e levará em consideração que pode haver atualizações
mais rápidas que ocorram.
Então com isso no lugar, você provavelmente descobrirá também, porque você se multiplicou por isso, que sua
velocidade vai cair consideravelmente e você pode precisar mudar esse valor de velocidade, certo?
Portanto, vamos apenas pressionar o jogo e ver onde estamos.
Precisamos agilizar isto.
Você também vai descobrir, enquanto fazemos isso, que os porcos estão realmente afundando no chão.
Agora, a razão pela qual eles estão fazendo isso e estão se movendo agora muito, muito lentamente,
é que o vetor do porco para nosso objetivo é na verdade um pouco para baixo.
Portanto, quando este porco realmente bate aqui, ele está realmente descendo e atravessando
o chão e lá fora por causa da natureza 3D disto, se você quiser manter o porco no avião, então você
poderia levantar a posição de objetivo para ter a mesma posição y que o porco.
E daremos uma olhada nisso em um minuto.
Vamos apenas acelerar estes porcos.
Portanto, se em vez disso colocarmos dois aqui e pressionarmos o jogo, então nós o faremos.
Testemunhe que aquele porco vai para o subsolo.
Certo, mas eles estão se movendo muito mais suavemente.
Portanto, agora se pegarmos um dos porcos, vamos dar uma olhada na altura.
O porco está ligado.
É como se fosse 0. 862.
Se você conseguir o local da meta e colocar isso em 0. 862 e, em seguida, faça isso novamente, você verá que, como não há diferença
na altura dos porcos, não vai atravessar o solo.
Vai ficar no avião.
Certo.
Com isso funcionando, deixaremos este vídeo aqui quando voltarmos.
No próximo vídeo, abordaremos a questão de fazer o porco parar na meta.