Aktualizacja a naprawiono aktualizację

W Unity obie funkcje Aktualizuj i FixedUpdate służą do aktualizacji zachowania obiektów w scenie i chociaż służą podobnym celom, istnieją między nimi zasadnicze różnice.

'Update'

Funkcja 'Update' wywoływana jest raz na ramkę i idealnie nadaje się do obsługi input, aktualizowania obiektów pozycji i wykonywania większości zadań ogólnego przeznaczenia. Nie jest zależny od liczby klatek na sekundę, co oznacza, że ​​czas wykonania może się różnić w zależności od wydajności.

void Update()
{
    // Input handling
    float horizontalInput = Input.GetAxis("Horizontal");
    float verticalInput = Input.GetAxis("Vertical");
    
    // Movement
    Vector3 movement = new Vector3(horizontalInput, 0, verticalInput);
    transform.Translate(movement * speed * Time.deltaTime);
    
    // General-purpose tasks
    // ...
}

W powyższym przykładzie pobieramy dane wejściowe z osi poziomej i pionowej i używamy ich do kontrolowania ruchu obiektu. Metoda 'Translate' służy do przemieszczania obiektu w określonym kierunku ze stałą prędkością. W ramach funkcji 'Update' można także wykonywać zadania ogólnego przeznaczenia.

„FixedUpdate”

Funkcja 'FixedUpdate' jest wywoływana w stałych odstępach czasu, dzięki czemu nadaje się do wykonywania obliczeń związanych z fizyką. Jest niezależny od liczby klatek na sekundę, zapewniając spójne zachowanie na różnych urządzeniach i częstotliwościach klatek.

void FixedUpdate()
{
    // Physics calculations
    rb.AddForce(transform.forward * forceMagnitude);
    
    // Other physics-related tasks
    // ...
}

W powyższym przykładzie przykładamy stałą siłę do komponentu Rigidbody w kierunku obiektu do przodu. Użycie 'FixedUpdate' gwarantuje, że obliczenia fizyczne będą wykonywane ze stałą szybkością, niezależnie od szybkości klatek. Jest to ważne dla utrzymania stabilnej symulacji fizyki.

'Update' vs „FixedUpdate”

Kluczowe różnice między funkcjami 'Update' i 'FixedUpdate':

  • 'Update' jest wywoływane raz na ramkę, podczas gdy FixedUpdate jest wywoływane w stałych odstępach czasu.
  • 'Update' zależy od liczby klatek na sekundę, podczas gdy FixedUpdate jest niezależne od liczby klatek na sekundę.
  • 'Update' nadaje się do większości zadań ogólnego przeznaczenia, w tym obsługi danych wejściowych, ruchu obiektów i operacji niezwiązanych z fizyką.
  • FixedUpdate jest specjalnie zaprojektowany do obliczeń związanych z fizyką, takich jak przykładanie sił, dostosowywanie właściwości Rigidbody i wykonywanie innych operacji opartych na fizyce.

Wniosek

Należy zauważyć, że 'Update' i 'FixedUpdate' mogą współistnieć w tym samym skrypcie, umożliwiając oddzielenie kodu związanego z fizyką od innego kodu ogólnego przeznaczenia. Zrozumienie różnic i użycie odpowiedniej funkcji w każdym kontekście pomaga zapewnić płynne i spójne działanie w projektach Unity.

Sugerowane artykuły
Przewodnik po MonoBehaviour w Unity
Wprowadzenie do języka skryptowego Unity C#
Korzystanie z kontrolera Runtime Animator w Unity
Lista Unity przydatnych słów kluczowych w C#
Implementowanie wprowadzania danych z klawiatury i myszy w Unity
Zrozumienie funkcji i wywołań metod
Tworzenie instrukcji warunkowych (if-else) w kodzie Unity