Hvordan integrere en hoppende animasjon med Unity

I dag avsluttet jeg min første hoppanimasjon i Blender, som jeg ønsket å integrere i Unity. Jeg tenkte at jeg bare måtte gjøre noe som "OK når jeg trykker på hoppknappen, utløser hoppanimasjonen, og det er det!". Ikke engang i nærheten!

Jeg gjorde dette, og resultatet ble ... ikke helt som jeg forventet.

Jeg er ganske sikker på at prosessen jeg beskrev tidligere ville fungere i noen spesifikke tilfeller, men dessverre ikke i min.

Jeg måtte gå gjennom en lengre metode.

Et raskt blikk inn i et hopp

Et vanlig hopp kan deles i tre forskjellige faser:

  • Hopps impulsjon: når karakteren vår tar impulsjon og hopp.
  • Fallende fase: når karakteren vår prøver å holde seg stabil mens han er i lufta.
  • Landingsfase: når vår karakter, fremdeles i luften, forbereder seg på å nå bakken.

Hvordan fungerer det i et spill?

Når spilleren trykker på mellomromstasten (som åpenbart er hoppknappen ), utløser den hoppanimasjonen.

Når spilleren er i luften, starter en annen animasjon: den fallende fasen som løkker til den når bakken.

Så starter landing-animasjonen, men med en subtilitet: hvis denne animasjonen starter når karakteren nettopp nådde bakken, er det for sent! I denne fasen vet vi at vi kommer til å treffe bakken (ganske enkelt fordi vi kan se det). Dermed kan vi enkelt evaluere avstanden og være forberedt på påvirkningen mens du er i luften.

La oss tenke på hvordan vi oppfører oss når vi hopper! Når vi ser at vi kommer til å treffe bakken , forbereder vi oss på "innvirkningen". Vi kan fordi vi har visjonen om bakken og raskt kan evaluere når vi trenger å være forberedt.

Det som mangler i vårt tilfelle er noe å evaluere avstanden til vår karakter fra bakken! Jeg vil utsette deg en metode for å evaluere denne avstanden fra karakteren til bakken, men merk deg at det er mange andre måter å gjøre det på. Den kan brukes i andre spillmotorer.

Trikset er å kaste en stråle fra vår karakter i hastigheten hans retning. Vi vil da kunne utløse landingsanimasjonen til rett tid rett før vi når den! 🥳

Klar?

Implementering med enhet

I Unity er det et verktøy som heter Raycast som vil gi oss nøyaktig hva vi vil.

Vi fortsetter i to trinn:

  • Vi sender en Raycast i hastigheten vår retning for å bestemme avstanden før vi berører bakken.
  • Hvis hastigheten vår på den vertikale aksen, y i Unity, er negativ (noe som betyr at vi faller) og bakken er for nær, utløser vi landingsanimasjonen.

Det er perfekt, men nå når vi hopper i spillet, vil skriptet utløse animasjonene våre til rett tid. Til evigheten og forbi! ️