Ako integrovať skákaciu animáciu do Unity

Dnes som dokončil svoju prvú animáciu skákania v Blender, ktorú som chcel integrovať do Unity. Myslel som, že budem musieť urobiť niečo ako „OK, keď stlačím tlačidlo skákania, spustím animáciu skákania a je to!“. Ani zďaleka!

Urobil som to a výsledok nebol ... taký, ako som očakával.

Som si istý, že proces, ktorý som opísal skôr, bude fungovať v niektorých konkrétnych prípadoch, ale bohužiaľ, nie v mojom.

Musel som ísť cez dlhšiu metódu.

Rýchly pohľad do skoku

Pravidelný skok možno rozdeliť do troch rôznych fáz:

  • Skokový impulz: keď naša postava nabáda a skočí.
  • Falling fáze: keď sa naša postava snaží zostať stabilná, zatiaľ čo vo vzduchu.
  • Fáza pristátia: keď sa naša postava, stále vo vzduchu, pripravuje na dosiahnutie zeme.

Ako to funguje v hre?

Keď hráč stlačí medzerník (čo je samozrejme tlačidlo na skákanie ), spustí sa animácia skákania.

Keď je hráč vo vzduchu, začne ďalšia animácia: klesajúca fáza, ktorá sa opakuje, až kým nedosiahne zem.

Potom sa začne animácia pristátia, ale s jemnosťou: ak sa táto animácia začne, keď postava práve dosiahla zem, je príliš neskoro! V tejto fáze vieme, že sa dostaneme na zem (jednoducho preto, že ju vidíme). Môžeme teda ľahko vyhodnotiť vzdialenosť a pripraviť sa na náraz počas letu.

Poďme sa zamyslieť nad tým, ako sa správame, keď skočíme! Keď vidíme, že sa dostaneme na zem , pripravujeme sa na „dopad“. Môžeme, pretože máme víziu zeme a dokážeme rýchlo vyhodnotiť, kedy musíme byť pripravení.

V našom prípade chýba niečo na vyhodnotenie vzdialenosti našej postavy od zeme! Odhalím vám jednu metódu na vyhodnotenie tejto vzdialenosti od postavy po zem, ale všimnite si, že existuje mnoho iných spôsobov, ako to urobiť. Môže byť použitý v inom hernom engine.

Trik je vrhať lúč z našej postavy v smere jeho rýchlosti. Potom budeme môcť spustiť pristávaciu animáciu v pravý čas tesne pred tým, ako ju dosiahneme! 🥳

Pripravený?

Implementácia s jednotou

V jednote existuje nástroj s názvom Raycast, ktorý nám dá presne to, čo chceme.

Postupujeme v dvoch krokoch:

  • Pošleme Raycast v smere našej rýchlosti, aby sme určili vzdialenosť skôr, ako sa dotkneme zeme.
  • Ak je naša rýchlosť na zvislej osi y v jednote záporná (čo znamená, že padáme) a zem je príliš blízko, spustíme animáciu pristátia.

Je to dokonalé, ale teraz, keď skočíme do hry, skript spustí naše animácie v pravý čas. Do nekonečna a ešte ďalej! ️