fbpx

Herní smyčka (některé české překlady jsou fakt vtipné, ale nenapadá nás jak jinak to „počeštit“) Unity je klíčovým mechanismem, který zajišťuje plynulý průběh hry a interakci ve vaší hře. Mezi její základní funkce patří metody Update, FixedUpdate a LateUpdate, každá hraje důležitou roli ve vývoji her. Tento průvodce si klade za cíl tyto funkce objasnit a poskytnout vhledy jak pro začátečníky, tak pro pokročilé vývojáře.

Ve vývoji her je důležité vědět, kdy a jak používat Update, FixedUpdate a LateUpdate. Nesprávné používání těchto funkcí může vést k různým problémům, jako jsou nepravidelné chování fyziky, zasekávání nebo neplynulá animace nebo synchronizační problémy mezi herními prvky.


Metoda Update

Srdce, mozek i tělo vaší hry a celého Unity. Tato metoda je synchronně volána jednou za snímek. Odehrává se zde většina vaší herní logiky, jako je zpracování vstupů z klávesnice, myši (a jiných zařízení), pohyb postav, kamery a dalších objektů, spouštění herních událostí a mnoho dalších. Délka běhu metody update je tedy úzce svázána s FPS vaší hry.

Tip numero uno:

Dejte si pozor, aby se vaše update metoda stihla spustit jednou za 0,0166* sekundy nebo rychleji. Možná si říkáte, že to je docela málo času, to je ale relativní – mějte na paměti, že ve světě vývoje her je necelých 17 milisekund dost času.

* 16,67ms platí pouze pokud cílíte na 60FPS, pokud cílíte výše například na 144FPS potom už máte k dispozici „jen“ 0,00694 sekundy (necelých 7 milisekund).

Jedna důležitá prosba!!!

Žijeme v roce *doplňte si aktuální rok, kdy čtete tento článek*, cílení na 30FPS je dávno za zenitem, a kdo říká že ne, tak kecá a je líný optimalizovat. I když ano, je pravdou, že pro 30FPS je čas na spuštění kódu dvojnásobný. Je to sice jen náš subjektivní názor, ale ani my už bysme dneska moderní hru na 30FPS prostě nehráli.


Metoda FixedUpdate

FixedUpdate běží s konzistentní rychlostí, což je perfektní pro správu výpočtů a pohybů souvisejících s fyzikou. Tato metoda se spouští každých 0,02 sekundy (čili 50x za sekundu), nicméně tuto rychlost si můžete nastavit v Unity sami.

Nastavení časového intervalu pro FixedUpdate

Fyzikální výpočty vyžadují stabilní prostředí pro zajištění konzistentního chování, které tato metoda poskytuje tím, že běží nezávisle na frekvenci snímků. Jinými slovy, zatímco spouštění metody Update bude kolísat v závislosti na výpočetních operacích, FixedUpdate bude mnohem více stabilní.

Tip numero duo:

Nespoléhejte na to, že když vám spadne FPS v Update metodě na 5 za sekundu, že to neovlivní také FixedUpdate. Berte v potaz to, že pořád máte jeden procesor a pokud ho jedním procesem vytížíte, neznamená, že druhý proces poběží standardně.

Metoda LateUpdate

Metoda LateUpdate je volána po všech metodách Update. Zde můžete upravit pohyby kamer a provádět akce, které musí být provedeny po všech ostatních standardních aktualizačních operacích. Tady je důležité si uvědomit, že LateUpdate je superkritický pro běh vaší hry, protože této metodě už moc času na spuštění kódu nezbývá.


Co tedy vkládat do kterých metod?

UpdateFixedUpdateLateUpdate
Zpracování uživatelského vstupuÚpravy pozic RigidbodyPohyby kamery
Pohyb objektů bez fyzikyAplikace sil a točivých momentůReaktivní animace (např. procedurální animace závislé na jiných pohybech)
Jednoduché časovače a eventySložité fyzikální a matematické simulacePost-procesní efekty
Tabulka s příklady co do které metody vkládat

Tohle jsou ale jen základy, jestli vás zajímá více, určitě pokračujte na rozšířený článek o těchto metodách, protože spousta herních vývojářů blokují své metody a možná o tom ani neví. Zjistěte, jestli náhodou nepatříte mezi ně?


Zdroje (Anglicky):

https://docs.unity3d.com/ScriptReference/MonoBehaviour.Update.html

https://docs.unity3d.com/ScriptReference/MonoBehaviour.FixedUpdate.html

https://docs.unity3d.com/ScriptReference/MonoBehaviour.LateUpdate.html