A maneira como configuramos nosso caractere atual é usar o LookAt para virar para o local de destino,
mas o problema é que ele faz com que seu personagem se encaixe instantaneamente.
Em vez disso, queremos introduzir um método para que nosso personagem se volte lentamente em direção ao alvo.
Para fazer isso, usaremos o intERPolation Linear Esférico ou SLERP para abreviar e o
que ele faz é interpolar entre o vetor que estamos enfrentando atualmente e a direção
em que queremos estar.
Isso é feito durante um período de tempo específico, para que você possa girar um pouco de ângulo a cada vez
até chegar à direção da meta.
Vamos começar a implementar isso no Unity. Então, vamos modificar o projeto anterior com o
qual terminamos dentro do script MoveLocal.
A primeira coisa que precisamos é de um flutuador para a velocidade de rotação, então vamos chamá-lo de rotSpeed e defini-lo como 0. 5f.
As chances são de que, assim que você começar a mover seus personagens, você não desejará que a velocidade e a
velocidade de rotação sejam exatamente iguais.
Portanto, ter dois valores diferentes funciona muito bem porque você pode ajustar qualquer um deles. É claro que, neste caso, eu os tenho
da mesma forma.
Na verdade, eu posso simplesmente diminuir para 0. 1
Agora, temos um lookAtGoal, mas também precisamos calcular a direção que queremos seguir, então
voltamos ao que tínhamos originalmente e combinamos esses dois.
Então, queremos trabalhar na nossa direção que precisamos enfrentar.
Portanto, é uma direção Vector3 e será igual ao nosso lookAtGoal menos nossa posição atual.
Agora, a única outra mudança que precisamos fazer é transformar esse LookAt aqui em um slerp que usará a direção como
seu rumo.
Portanto, exclua a linha LookAt e substitua-a por esta.
O slerp está definindo a rotação do seu personagem, portanto, estamos fazendo isso. transformar. rotação = ao invés
de uma posição ou um Translate e isso. A rotação é então definida usando o
método slerp que você pode encontrar na classe Quaternion. O Quaternion é uma estrutura de dados complexa que mantém uma rotação
e pode fazer todo tipo
de coisa fantástica, mas, neste caso, está mudando o ângulo de uma direção para outra.
Portanto, o slerp em si assume a rotação atual do seu personagem.
Em seguida, ele executa uma LookRotation em sua direção; portanto, a direção é o nosso vetor calculado que está apontando em
direção ao nosso objetivo, mas não podemos executar o slerp no vetor de direção.
Queremos fazer o slerp no ângulo pelo qual temos que girar, para chegar de onde estamos
olhando atualmente para a direção específica.
Então este Quaternion. LookRotation
nos dará a rotação que precisa ocorrer para estar na 'direção' e, assim, combinando esses dois e
comparando-os pouco a pouco, então
lentamente passamos de um para o outro.
Agora, a taxa em que giramos é o terceiro valor que você coloca dentro desse método e
o baseamos no mesmo tipo de velocidade que usamos para mover um personagem para a frente, onde deltaTime é
multiplicado pelo tempo de rotação .
Certo.
Então, vamos salvar isso, entrar no Unity e ver como isso funciona. Certifique-se de que seu personagem esteja voltado
para longe do objetivo, para que você possa ver a virada ocorrendo. Então pressione Play e o personagem continuará avançando ao longo de
seu vetor de avanço, que é o que queremos e, ao mesmo tempo, esse
slerp está operando para mudar seu personagem e você pode ver aqui na cena que
ele está começando. arco ao redor para lá.
Agora está um pouco lenta, essa velocidade de rotação, então vamos parar com isso.
Volte para
o nosso MoveLocal e aumente-o.
Então, se colocarmos isso para dizer 4 e salvá-lo e executá-lo novamente.
Descobrimos que o personagem gira muito mais nitidamente e agora podemos dirigir nosso cubo e
o personagem girará e seguirá.
Então é assim que você move seu personagem para a frente e executa
um slerp
para colocar seu personagem na direção certa e apenas nesses poucos vídeos, abordamos praticamente todos os princípios essenciais
de que você precisará para obter alguns comportamento complexo acontecendo nos NPCs.