kolejny artykuł o tym, kiedy używać metod Update i FixedUpdated.
td;lr: po dość łatwym odtworzeniu problemu mieszania i dopasowywania timesteps, przekonałem się, że powinienem umieścić cały stan gry w metodach fixedupdate.
zanim przejdę do treści tego artykułu, chciałem wyjaśnić, dlaczego w pierwszej kolejności interesuje mnie jedność:
nie interesuje mnie ani granie, ani Tworzenie gier wideo
interesuje mnie budowanie użytecznych narzędzi (od wielu lat jestem programistą stron internetowych)
nie jestem wczesnym użytkownikiem
Unity to ugruntowane rozwiązanie do tworzenia wieloplatformowych doświadczeń 3D
mając to wszystko na uwadze, budowanie praktycznych rozwiązań rozszerzonej rzeczywistości (Ar) z Unity jest czymś, czego muszę się nauczyć.
jeśli chodzi o naukę jedności, nie znalazłem szczególnie przydatnych oficjalnych samouczków jedności. Uważam, że kurs Udemy Learn Unity 3D dla początkujących jest doskonały.
przeglądałem materiały i znalazłem się zawieszony na różnicy lekcji między Update i FixedUpdate. Badając nieco więcej, sednem problemu było to, że nie rozumiem następującego uzasadnienia.
Update (); … używane do regularnych aktualizacji, takich jak: ruchome obiekty inne niż fizyczne
FixedUpdate();… używane do regularnych aktualizacji, takich jak: Dostosowywanie obiektów fizyki (Rigidbody)
Unity — Update i FixedUpdate — Unity oficjalne samouczki
pojawiło się trochę więcej badań:
podsumowując, umieść całą swoją logikę gry w Update lub FixedUpdate. Nie mieszaj i dopasowuj timesteps, chyba że jesteś gotów ugryźć kulę i zaakceptować jąkanie się. Dodatkowo, zdecydowanie warto rozważyć umieszczenie całego stanu gry w FixedUpdate, używając aktualizacji wyłącznie do wprowadzania danych przez użytkownika, efektów wizualnych i interpolacji między stanami gry. Chociaż wymaga to zmiany struktury gier, jest to sprawdzona struktura projektowa z wieloma zaletami.
— KinematicSoup — Timesteps i uzyskiwanie płynnego ruchu w jedności
klip wideo w artykule ilustruje problem mieszania i dopasowywania timesteps.
zanim zastosowałem się do tej rady chciałem odtworzyć problem mieszania i dopasowywania timestepów na własną rękę.
finalna wersja projektu, której użyłem pisząc ten artykuł jest dostępna do pobrania.
Update vs FixedUpdate
musimy zacząć od podstawowego zrozumienia różnicy między metodami Update i FixedUpdate. Aby zilustrować, tworzymy pusty obiekt GameObject o nazwie Setup i dodajemy następujący komponent skryptu:
Assets/Setup.cs (niekompletny)
nasze wyjście konsoli po 3 sekundach wyglądało tak:
obserwacje:
aktualizacja jest wywoływana przed każdym renderowaniem; częstotliwość (liczba klatek na sekundę) różni się w zależności od złożoności renderowania i urządzenia hosta. Potężne komputery mogą osiągnąć szybkość klatek przekraczającą 150 klatek na sekundę; mój komputer programistyczny działał około 50 klatek na sekundę. Poniżej 30 fps, jest uważany za słabe doświadczenie.
FixedUpdate jest wywoływany przed każdą wewnętrzną aktualizacją fizyki (poruszanie się przedmiotów z powodu fizyki, np. grawitacji). Ustawiony timestep Unity domyślnie wynosi 0.02; powoduje wywołanie FixedUpdate 50 razy na sekundę.
Symulacja wolnej liczby klatek na sekundę
aby symulować wolną liczbę klatek na sekundę (10 klatek na sekundę), aktualizujemy konfigurację.skrypt cs:
Assets/Setup.cs (niekompletny)
nasze wyjście konsoli po 3 sekundach wyglądało tak: