Znam pewne różnice między Update()
a FixedUpdate()
i ostatnio używałem obu funkcji w jednym skrypcie. Kod działa, ale mam pytanie:
Czy używanie obu tych funkcji powoduje jakieś problemy? Czy używanie obu jest bezpieczne?
Odpowiedź
Zaktualizuj zamówienie
Kiedy śledzisz logikę gry i interakcje, animacje, pozycje kamery itp., możesz użyć kilku różnych zdarzeń. Typowym wzorcem jest wykonywanie większości zadań w funkcji Update, ale są też inne funkcje, których możesz użyć.
FixedUpdate:
FixedUpdate jest często nazywana częściej niż Aktualizacja.
Może być wywoływany wiele razy na klatkę, jeśli liczba klatek na sekundę jest niska, i może nie być wywoływana w ogóle między klatkami, jeśli liczba klatek jest wysoka. Wszystkie obliczenia i aktualizacje fizyki następują natychmiast po FixedUpdate. Podczas wykonywania obliczeń ruchu w programie FixedUpdate nie ma potrzeby mnożenia wartości przez Time.deltaTime.
FixedUpdate jest wywoływana przez niezawodny zegar, niezależnie od liczba klatek na sekundę
.
Aktualizacja:
Aktualizacja jest wywoływana raz na klatkę. Jest to główna funkcja służąca do aktualizacji ramek.
LateUpdate:
Funkcja LateUpdate jest wywoływana raz na klatkę po zakończeniu aktualizacji.
Wszelkie obliczenia wykonywane w programie Update zostaną zakończone, gdy rozpocznie się LateUpdate. Typowym zastosowaniem funkcji LateUpdate byłaby następująca kamera trzeciej osoby. Jeśli sprawisz, że twoja postać się poruszy i obrócisz w aktualizacji, możesz wykonać wszystkie obliczenia ruchu i obrotu kamery w LateUpdate. Zapewni to całkowite przesunięcie postaci, zanim kamera wyśledzi jej pozycję.
Jednoczesne używanie stałej aktualizacji, aktualizacji i późnej aktualizacji jest bezpieczne.
using UnityEngine; using System.Collections; public class CheckFunctionExecutionOrder : MonoBehaviour { void FixedUpdate () { Debug.Log("FixedUpdate time :" + Time.deltaTime); } void Update () { Debug.Log("Update time :" + Time.deltaTime); } void LateUpdate() { Debug.Log("late Update time :" + Time.deltaTime); } }
Odpowiedź
W rzeczywistości wszystkie działają w tym samym czasie, twoje skrypty po prostu wykonują te funkcje. Aktualizacja jest wywoływana raz na klatkę, a FixedUpdate jest wywoływana po każdej „aktualizacji fizyki” (co jest co określony czas, który możesz dostosować).
Jest też LateUpdate , jeśli chcesz, aby pewne funkcje działały po funkcja Update tej ramki odniesienia. Pełną listę komunikatów można znaleźć w opisie MonoBehaviour .
Tutaj znajduje się link do Samouczek Unity, który to obejmuje .
Komentarze
Odpowiedź
Można bezpiecznie używać Update (), FixedUpdate () i LateUpdate () w jednym skrypcie. Przynajmniej mam i nigdy nie miałem żadnych problemów.Generalnie będę używał Update () do moich głównych pętli, FixedUpdate () do rzeczy takich jak fizyka i LateUpdate () do pętli, które chcę wykonać po wszystkim innym.