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.