Sådan integreres en springende animation med Unity

I dag afsluttede jeg min første springanimation i Blender, som jeg ønskede at integrere i Unity. Jeg tænkte, at jeg bare skulle gøre noget som "Ok, når jeg trykker på springknappen, udløser hoppeanimationen, og det er det!". Ikke engang tæt på!

Jeg gjorde dette, og resultatet blev ... ikke helt, hvad jeg forventede.

Jeg er temmelig sikker på, at processen, jeg beskrev tidligere, ville fungere i nogle specifikke tilfælde, men desværre ikke i min.

Jeg var nødt til at gennemgå en længere metode.

Et hurtigt kig ind i et spring

Et regelmæssigt spring kan opdeles i tre forskellige faser:

  • Jump's impulsion: når vores karakter tager impulsion og jump.
  • Faldende fase: når vores karakter prøver at holde sig stabil, mens han er i luften.
  • Landingsfase: når vores karakter, stadig i luften, forbereder sig på at nå jorden.

Hvordan fungerer det i et spil?

Når afspilleren trykker på mellemrumstasten (hvilket naturligvis er hoppeknappen ), udløser den springende animation.

Når spilleren er i luften, starter en anden animation: den faldende fase, der løber, indtil den når jorden.

Derefter starter landingsanimationen, men med en subtilitet: hvis denne animation starter, når karakteren lige nåede jorden, er det for sent! I denne fase ved vi, at vi kommer til at ramme jorden (simpelthen fordi vi kan se det). Således kan vi nemt evaluere afstanden og være forberedt på påvirkningen, mens vi er i luften.

Lad os tænke på, hvordan vi opfører os, når vi hopper! Når vi ser, at vi kommer til at ramme jorden , forbereder vi os på "påvirkningen". Vi kan, fordi vi har visionen om jorden og hurtigt kan evaluere, hvornår vi er nødt til at være forberedt.

Hvad der mangler i vores tilfælde er noget at evaluere afstanden af ​​vores karakter fra jorden! Jeg vil udsætte dig en metode til at evaluere denne afstand fra karakteren til jorden, men bemærk, at der er mange andre måder at gøre det på. Det kan bruges i andre spilmotorer.

Tricket er at kaste en stråle fra vores karakter i hans hastigheds retning. Vi vil derefter være i stand til at udløse landingsanimationen på det rigtige tidspunkt lige inden vi når den! 🥳

Parat?

Implementering med enhed

I Unity er der et værktøj kaldet Raycast, der giver os nøjagtigt, hvad vi ønsker.

Vi fortsætter i to trin:

  • Vi sender en Raycast i vores hastigheds retning for at bestemme afstanden, før vi rører jorden.
  • Hvis vores hastighed på den lodrette akse, y i Enhed, er negativ (hvilket betyder, at vi falder), og jorden er for tæt, udløser vi landingsanimationen.

Det er perfekt, men nu, når vi springer ind i spillet, vil scriptet udløse vores animationer på det rigtige tidspunkt. Mod det uendelige univers! ️