Nesta palestra, quero abordar uma questão sobre a qual as pessoas me perguntaram muito na seção de perguntas e respostas
e que está sincronizando a velocidade dos agentes com a do agente navmesh. Como você pode ver aqui, eu tenho um
sistema de waypoint muito simples configurado em uma navmesh e Ethan demonstrando como sua animação em execução está muito
rápida para o que ele está realmente fazendo, por isso precisa ser mais lenta, mas de
alguma forma precisa ser sincronizado com a velocidade do agente.
Agora, quando falo sobre a velocidade do agente (deixe-me parar de
jogar isso), se voltarmos ao nosso agente real e dar uma olhada no Inspetor, há uma 'Velocidade' que você pode definir.
Essa velocidade é de três pontos cinco.
Agora, este é SEMPRE 3. 5)
É a velocidade em que você está permitindo que seu agente 'dirija em' / 'se mova entre pontos em'.
Mas não é necessariamente o quão rápido ele está indo, porque ele vai diminuir a velocidade nos cantos e depois acelerar a
partir deles.
Portanto, o valor que você realmente deseja ter dirigindo suas animações é a 'velocidade' do
personagem e eu vou mostrar como atribuir isso às animações.
Ok, para que você possa se apossar desse projeto em particular, ele é anexado como um recurso.
Selecione 'Ambiente' e transforme-o em uma navmesh; portanto, clique na guia Navegação ou localize-o
em Janela> AI> Navegação e apenas clique em [Bake] para
ver esta área azul ao tentar executar, caso contrário, você
receberá um erro.
Quando você pressiona Play, verá exatamente o que está vendo aqui.
Agora, tenho as animações de Ethan ativadas muito rápido de propósito, apenas para demonstrar como é possível
obter animações que não se encaixam na velocidade disso.
Agora, o próprio personagem é dirigido pelo agente navmesh, assim a velocidade e tudo. A animação, se dermos uma olhada no Inspetor
na animação, eu tenho 'Aplicar movimento raiz' desativado porque não queremos que o sistema
de animação tente mover o agente enquanto o agente está sendo conduzido por si próprio.
código,
então isso precisa estar desativado.
Está bem.
Então, como sincronizamos esses dois valores?
Bem, antes de tudo, precisamos entrar no Animator com Ethan selecionado e dar uma olhada na lista de parâmetros.
Atualmente está vazio.
Vamos definir um parâmetro aqui,
então vamos adicionar um Float e chamaremos de velocidade ou 'vel'.
Que vai fazer.
Podemos deixar para 0, vamos mudar isso com o código.
Agora que você conseguiu isso, selecione a animação (só há um HumanoidRun no momento) e,
no Inspetor, você verá que a velocidade atualmente para HumanoidRun está definida como 3.
Vamos multiplicar essa velocidade por um parâmetro, então selecione-o e, se
você soltar a lista ao lado, obterá 'vel'.
Portanto, qualquer parâmetro que você tenha aqui, aplicável à multiplicação pela velocidade, poderá
colocar nesta lista suspensa e controlar com seu script.
Tudo certo.
Temos isso, agora vamos abrir o script que está no Ethan, que é esse
FollowPath e primeiro precisamos do Animator.
Então, vamos falar sobre isso com 'Animator anim;' e então vamos pegar isso
no começo com 'anim = this. GetComponent 'e, em seguida, Animator e, finalmente, este é apenas um sistema simples de
waypoint percorrendo cada waypoint e atualizando-os conforme chegamos ao destino.
Depois de fazer isso, vamos definir a velocidade.
Então este será o anim. SetFloat ("vel" e o valor que
vamos definir como.
Bem, essa é a velocidade e você pode tirar isso do agente com 'agent. velocidade'.
Agora isso é um vetor.
Você quer o comprimento desse vetor.
Assim '. magnitude 'porque esse vetor mudará de comprimento com base na intensidade da velocidade.
Ok, agora essa magnitude será inserida na sua velocidade. Guarde isso assim que conseguir. Vamos
voltar para a Unity. Abra a janela do Animator para que você possa assistir a essa mudança 'vel' com a velocidade do agente.
Então pressione Play e, em seguida, olhe aqui. Você pode ver como isso muda e, na verdade, diminui e depois sobe novamente à
medida que ele acelera em cada uma delas.
Agora, ao multiplicar atualmente 3. 5 por ... o que tem aqui ... 3)
Então isso é muito rápido, como você pode ver lá, então
vamos parar com isso.
Vamos abaixar nosso multiplicador de velocidade para dizer 0. 3 e, em seguida,
pressione Play e agora você verá (vamos voltar à cena, para que
possamos ver melhor) que ele agora está muito melhor nessa superfície.
Ele não está tocando o chão, mas podemos consertar isso.
Isso é uma coisa de navmesh.
Se selecionarmos Ambiente e irmos para Navegação, poderemos então clicar em 'Avançado', ativar a 'Malha de altura' e,
em seguida, assá-lo.
Isso permitirá que ele agora, quando ele corre para se sentar um pouco melhor na malha real.
Isso, é claro, não afeta a animação.
Mas agora você sabe como passar valores do seu script para o animador e depois controlar isso para
que você tenha uma animação procedural mais realista.