Actualizare vs FixedUpdate

În Unity, atât funcțiile Actualizare, cât și FixedUpdate sunt folosite pentru a actualiza comportamentul al obiectelor dintr-o scenă și, deși servesc unor scopuri similare, există diferențe cheie între cele două.

'Update'

Funcția 'Update' este denumită o dată pe cadru și este ideală pentru gestionarea input, actualizarea obiectului positions și efectuarea majorității sarcinilor de uz general. Nu este dependent de frame-rate, ceea ce înseamnă că poate varia în timpul de execuție în funcție de performanță.

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
    // ...
}

În exemplul de mai sus, recuperăm intrarea de la axele orizontale și verticale și o folosim pentru a controla mișcarea obiectului. Metoda 'Translate' este folosită pentru a muta obiectul în direcția specificată cu o viteză constantă. Sarcinile cu scop general pot fi efectuate și în cadrul funcției 'Update'.

'FixedUpdate'

Funcția 'FixedUpdate' este apelată la intervale de timp fixe, ceea ce o face potrivită pentru gestionarea calculelor legate de fizică. Este independent de frecvența de cadre, asigurând un comportament consistent pe diferite dispozitive și rate de cadre.

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

În exemplul de mai sus, aplicăm o forță constantă unei componente Rigidbody în direcția înainte a obiectului. Utilizarea 'FixedUpdate' asigură că calculele fizice au loc la o rată fixă, indiferent de rata de cadre. Acest lucru este important pentru menținerea unei simulări stabile a fizicii.

'Update' vs 'FixedUpdate'

Diferențele cheie între funcțiile 'Update' și 'FixedUpdate':

  • 'Update' este apelat o dată pe cadru, în timp ce FixedUpdate este apelat la intervale de timp fixe.
  • 'Update' este dependent de frame-rate, în timp ce FixedUpdate este independent de frame-rate.
  • 'Update' este potrivit pentru majoritatea sarcinilor de uz general, inclusiv manipularea intrărilor, mișcarea obiectelor și operațiuni care nu sunt legate de fizică.
  • FixedUpdate este special conceput pentru calcule legate de fizică, cum ar fi aplicarea forțelor, ajustarea proprietăților Rigidbody și efectuarea altor operații bazate pe fizică.

Concluzie

Este important de reținut că 'Update' și 'FixedUpdate' pot coexista în același script, permițând separarea codului legat de fizică de alt cod de uz general. Înțelegerea diferențelor și utilizarea funcției adecvate în fiecare context ajută la asigurarea unui comportament fluid și consistent în proiectele Unity.

Articole sugerate
Ghid pentru monocomportament în Unity
Introducere în limbajul de scripting Unity C#
Utilizarea Runtime Animator Controller în Unity
Lista unității de cuvinte cheie utile în C#
Implementarea introducerii prin tastatură și mouse în Unity
Înțelegerea funcțiilor și apelurilor de metodă
Crearea instrucțiunilor condiționate (dacă-altfel) în Unity Code