Como integrar uma animação de salto com o Unity

Hoje terminei minha primeira animação de salto no Blender, que queria integrar no Unity. Eu pensei que teria que fazer algo como "Ok, quando pressiono o botão de salto, aciono a animação de salto e é isso!". Nem mesmo perto!

Eu fiz isso e o resultado foi ... não exatamente o que eu esperava.

Tenho certeza de que o processo que descrevi anteriormente funcionaria em alguns casos específicos, mas, infelizmente, não no meu.

Eu tive que passar por um método mais longo.

Uma rápida olhada em um salto

Um salto regular pode ser dividido em três fases diferentes:

  • Impulsão do salto: quando nosso personagem está tomando impulsão e salto.
  • Fase de queda: quando nosso personagem está tentando permanecer estável enquanto está no ar.
  • Fase de aterrissagem: quando nosso personagem, ainda no ar, está se preparando para alcançar o solo.

Como isso funciona em um jogo?

Quando o jogador pressiona a barra de espaço (que obviamente é o botão de salto ), ele dispara a animação de salto.

Quando o jogador está no ar, outra animação começa: a fase de queda que se move até chegar ao chão.

Então a animação de aterrissagem começa, mas com uma subtilidade: se essa animação começa quando o personagem acaba de chegar ao chão, é tarde demais! Nesta fase, sabemos que vamos atingir o chão (simplesmente porque podemos vê-lo). Assim, podemos avaliar facilmente a distância e nos preparar para o impacto enquanto estiver no ar.

Vamos pensar em como nos comportamos quando pulamos! Quando vemos que vamos atingir o chão , estamos nos preparando para o "impacto". Podemos porque temos a visão do terreno e podemos avaliar rapidamente quando precisamos estar preparados.

O que está faltando no nosso caso é algo para avaliar a distância de nosso personagem do chão! Vou expor um método para avaliar essa distância do personagem ao chão, mas observe que existem muitas outras maneiras de fazer isso. Pode ser usado em outro mecanismo de jogo.

O truque é lançar um raio de nosso personagem na direção de sua velocidade. Poderemos acionar a animação de pouso no momento certo antes de alcançá-la! 🥳

Pronto?

Implementação com Unity

No Unity, existe uma ferramenta chamada Raycast que nos dará exatamente o que queremos.

Nós procedemos em duas etapas:

  • Enviamos um Raycast na direção da nossa velocidade para determinar a distância antes de tocar o chão.
  • Se nossa velocidade no eixo vertical, y em Unity, for negativa (o que significa que estamos caindo) e o solo estiver muito próximo, acionamos a animação de aterrissagem.

É perfeito, mas agora, quando entramos no jogo, o script acionará nossas animações no momento certo. Ao infinito e além! ️