Update() i FixedUpdate() to kolejna para metod, które teoretycznie robią to samo. Tym razem różnica ma jednak znacznie większe znaczenie niż w przypadku Start() i Awake()

Klatka klatce nie równa

Update() wykonywana jest w każdej klatce podczas działania gry. To znaczy, że jeśli gra działa w 60FPS, update wykona się 60 razy w ciągu sekundy. 30 razy przy 30FPS oraz odpowiednio mniej lub więcej razy, kiedy gra pod wpływem obciążenia będzie zwalniać lub przyśpieszać. Metodę tą można wykorzystać do odczytywania wszelkich akcji związanych ze sterowaniem przez gracza, wyświetlania statycznych grafik, czy „ręcznego” poruszania obiektami, na które nie oddziałuje fizyka.

Gdy zaprzęgamy do działania fizykę

FixedUpdate() przychodzi z pomocą. Silnik odpowiedzialny za wszystkie obliczenia związane z fizyką, wykonuje je ze stałym interwałem. FixedUpdate() wołana jest za każdym razem, kiedy dokonywane są kalkulacje na obiektach podlegających fizyce. To znaczy, że nie jesteśmy uzależnieni od aktualnej liczby klatek na sekundę i metoda będzie wołana czasem szybciej, a czasem wolniej niż Update(). Za każdym razem gdy aplikujemy siłę do obiektów posiadających RigidBody, powinniśmy to robić w FixedUpdate().

Update() i FixedUpdate() w punktach:

Update()

  • Wołana raz w każdej klatce
  • Działa niezależnie od silnika fizyki
  • Dobra do obsługi sterowania, wyświetlania statycznych grafik lub poruszania obiektami nie podlegającymi prawom fizyki
  • Można wykorzystać do kontroli prostych czasomierzy (Time.deltaTime przechowuje czas wykonania się ostatniej klatki, w sekundach)

FixedUpdate()

  • Wołana w każdym kroku silnika fizyki, czyli w stałych odstępach czasu
  • Może być wywołana zero, raz lub wiele razy w ciągu jednej klatki
  • Powinna być wykorzystywana do aplikowania sił wszystkim obiektom posiadającym RigidBody

Poczytaj o różnicy między Start() a Awake()