Com integrar una animació saltant amb Unity

Avui he acabat la meva primera animació de salt en Blender, que volia integrar a Unity. Vaig pensar que només hauria de fer alguna cosa com "d'acord quan premeu el botó de saltar, activeu l'animació saltant i ja està!". Ni tan sols!

Vaig fer això i el resultat va ser ... no del que m'esperava.

Estic segur que el procés que he descrit anteriorment funcionaria en alguns casos concrets, però, tristament, no en el meu.

Vaig haver de passar per un mètode més llarg.

Una ullada ràpida a un salt

Un salt regular es pot dividir en tres fases diferents:

  • Impulsió de Jump: quan el nostre personatge pren impuls i salta.
  • Fase caient: quan el nostre personatge tracta de mantenir-se estable mentre es troba a l’aire.
  • Fase d’aterratge: quan el nostre personatge, encara a l’aire, es prepara per arribar a terra.

Com funciona en un joc?

Quan el jugador prem la barra d’espai (que òbviament és el botó de saltar ), activa l’animació de salt.

Una vegada que el jugador està a l’aire, s’inicia una altra animació: la fase de caiguda que s’enlaira fins arribar a terra.

Aleshores s’inicia l’animació del desembarcament però amb una subtilesa: si aquesta animació comença quan el personatge acaba d’arribar a terra, és massa tard! En aquesta fase sabem que anirem a tocar el terra (simplement perquè ho podem veure). Així, podem avaluar fàcilment la distància i preparar-nos per a l’impacte mentre estem a l’aire.

Pensem en com ens comportem quan saltem! Quan veiem que anem a colpejar el terreny , ens estem preparant per a l '"impacte". Podem perquè tenim la visió del terreny i podem avaluar ràpidament quan necessitem estar preparats.

El que falta en el nostre cas és alguna cosa per avaluar la distància del nostre personatge des del sòl! Us exposaré un mètode per avaluar aquesta distància del personatge al sòl, però tingueu en compte que hi ha moltes altres maneres de fer-ho. Es pot utilitzar en altres motors de joc.

El truc és treure un raig del nostre personatge en la direcció de la seva velocitat. Aleshores podrem activar l’animació del desembarcament en el moment just abans d’arribar-hi. 🥳

A punt?

Implementació amb Unity

A Unity, hi ha una eina anomenada Raycast que ens donarà exactament el que volem.

Procedim en dos passos:

  • Enviem un Raycast en la direcció de la nostra velocitat per determinar la distància abans de tocar el terra.
  • Si la nostra velocitat a l’eix vertical, y a Unity, és negativa (cosa que vol dir que estem caient) i el terreny és massa a prop, llavors activarem l’animació d’aterratge.

És perfectible, però ara quan saltem al joc, el guió desencadenarà les nostres animacions en el moment adequat. Fins l'infinit i més enllà! ️