Conosco alcune differenze tra Update() e FixedUpdate() e recentemente ho usato entrambe le funzioni in uno script. Il codice funziona, ma ho una domanda:

Lutilizzo di entrambe queste funzioni causa problemi? È sicuro utilizzarli entrambi?

Rispondi

Aggiorna ordine

Quando tieni traccia della logica del gioco e delle interazioni, animazioni, posizioni della telecamera, ecc., puoi utilizzare alcuni eventi diversi. Lo schema comune è eseguire la maggior parte delle attività allinterno della funzione Aggiorna, ma ci sono anche altre funzioni che puoi utilizzare.

FixedUpdate:

FixedUpdate viene spesso chiamato più frequentemente di Update.

Può essere chiamato più volte per frame se il frame rate è basso e potrebbe non essere chiamato affatto tra i frame se il frame rate è alto. Tutti i calcoli e gli aggiornamenti fisici vengono eseguiti immediatamente dopo FixedUpdate. Quando si applicano calcoli di movimento allinterno di FixedUpdate, non è necessario moltiplicare i valori per Time.deltaTime.

FixedUpdate viene richiamato su un timer affidabile, indipendentemente dal frequenza fotogrammi

.

Aggiornamento:

Laggiornamento viene chiamato una volta per frame. È la funzione principale per gli aggiornamenti dei frame.

LateUpdate:

LateUpdate viene chiamato una volta per frame al termine dellaggiornamento.

Tutti i calcoli eseguiti in Update saranno completati allinizio di LateUpdate. Un uso comune per LateUpdate sarebbe una seguente videocamera in terza persona. Se fai muovere e girare il tuo personaggio allinterno di Update, puoi eseguire tutti i calcoli di movimento e rotazione della telecamera in LateUpdate. Ciò garantirà che il personaggio si sia completamente spostato prima che la telecamera rilevi la sua posizione.

Utilizzare Aggiornamento fisso, Aggiornamento e Aggiornamento tardivo contemporaneamente è sicuro.

 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); } } 

Commenti

  • Ottima risposta! Potrebbe valere la pena includere che è possibile creare una coroutine che attende FixedUpdate prima di essere eseguita; avviare questa coroutine da un metodo di avvio efficace ti dà un LateFixedUpdate (che, sebbene non altrettanto utile, ha i suoi usi).
  • Moltiplicare per Time.deltaTime è ancora una buona idea in FixedUpdate. Ti consente di esprimere cose come le velocità in " unità al secondo " invece di " unità per tick " e se modifichi il tuo intervallo di tempo fisso non ' dovrai tornare indietro e regolare nuovamente tutti i parametri per ottenere il stesse velocità. Il vantaggio in FixedUpdate è che Time.deltaTime restituisce sempre il fixedDeltaTime stabile quando si accede da FixedUpdate, piuttosto che ottenere un risultato variabile per ogni frame in base al framerate e al time scaling, come fa in Update.

Risposta

In realtà sono tutti in esecuzione allo stesso tempo, i tuoi script fanno solo cose in quelle funzioni. Update viene richiamato una volta per frame e FixedUpdate viene chiamato una volta ogni “aggiornamento fisico” (che è una volta per ogni periodo di tempo fisso che puoi regolare).

Cè anche LateUpdate , se desideri che determinate funzioni vengano eseguite dopo la funzione Aggiorna di quel frame di riferimento. Per un elenco completo dei messaggi, vedere il riferimento MonoBehaviour .

Here “sa link to the Tutorial Unity che copre questo .

Commenti

  • Laggiornamento della fisica è controllabile? Voglio dire, se imposto Fixed TimeStep su un valore, laggiornamento fisso verrà eseguito dopo quel tempo? e la fisica del gioco funzionerà anche dopo quel lasso di tempo?
  • @MuhammadFaizanKhan Dovrebbe funzionare così. Tuttavia, ' non sono sicuro della versione corrente di Unity, era comera quando ho scritto la risposta. Fondamentalmente, laggiornamento viene aggiornato a ogni fotogramma e la fisica ha una propria frequenza di fotogrammi e una funzione di aggiornamento separata dallaltra funzione di aggiornamento.

Risposta

È sicuro usare Update (), FixedUpdate () e LateUpdate () tutto in uno script. Almeno lo faccio e non ho mai avuto problemi.In genere userò Update () per i miei cicli principali, FixedUpdate () per cose come la fisica e LateUpdate () per i cicli che voglio eseguire dopo tutto il resto.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *