Jak integrovat skákací animaci s Unity

Dnes jsem dokončil svou první skokovou animaci v Blenderu, kterou jsem chtěl integrovat do Unity. Myslel jsem, že budu muset udělat něco jako „Ok, když stisknu tlačítko skákání, spustím skákací animaci a je to!“. Ani blízko!

Udělal jsem to a výsledek byl ... ne úplně to, co jsem očekával.

Jsem si jist, že proces, který jsem popsal dříve, bude fungovat v některých konkrétních případech, ale bohužel ne v mém.

Musel jsem jít přes delší metodu.

Rychlý pohled do skoku

Pravidelný skok lze rozdělit do tří různých fází:

  • Skokový impuls: když naše postava bere impuls a skočí.
  • Falling fáze: když se naše postava snaží zůstat stabilní, zatímco ve vzduchu.
  • Fáze přistání: když se naše postava, stále ve vzduchu, připravuje na dosažení země.

Jak to funguje ve hře?

Když hráč stiskne mezerník (což je samozřejmě tlačítko pro skákání ), spustí animaci skákání.

Jakmile je hráč ve vzduchu, začíná další animace: klesající fáze, která se opakuje, dokud nedosáhne země.

Poté začíná animace přistání, ale s jemností: pokud tato animace začíná, když postava právě dosáhla země, je příliš pozdě! V této fázi víme, že se dostaneme na zem (jednoduše proto, že to vidíme). Můžeme tedy snadno vyhodnotit vzdálenost a připravit se na dopad ve vzduchu.

Přemýšlejme o tom, jak se chováme, když skočíme! Když vidíme, že dopadneme na zem , připravujeme se na „dopad“. Můžeme, protože máme vizi země a dokážeme rychle vyhodnotit, kdy musíme být připraveni.

Co v našem případě chybí, je něco, co hodnotí vzdálenost naší postavy od země! Vystavím vám jednu metodu k vyhodnocení této vzdálenosti od postavy k zemi, ale všimněte si, že existuje mnoho jiných způsobů, jak toho dosáhnout. Může být použit v jiném herním enginu.

Trik je vrhnout paprsek z naší postavy ve směru jeho rychlosti. Poté budeme moci spustit přistávací animaci ve správný čas těsně předtím, než ji dosáhneme! 🥳

Jste připraveni?

Implementace s jednotou

V Unity je nástroj Raycast, který nám dá přesně to, co chceme.

Postupujeme ve dvou krocích:

  • Posíláme Raycast ve směru naší rychlosti, abychom určili vzdálenost dříve, než se dotkneme země.
  • Pokud je naše rychlost na svislé ose y v jednotě záporná (což znamená, že padáme) a země je příliš blízko, spustíme přistávací animaci.

Je to dokonalé, ale nyní, když skočíme do hry, skript spustí naše animace ve správný čas. Do nekonečna a ještě dál! ️