Update e LateUpdate
Fa parte della sezione Fondamenti di scripting in Unity del percorso Unity di Coddy. Lezione 71 di 85.
A ogni fotogramma Unity chiama Update() su ogni script e chiama LateUpdate() su ogni script solo quando tutti hanno terminato. Non sta a te decidere quale oggetto esegue per primo Update().
Questo è importante per tutto ciò che segue qualcos'altro. Una telecamera che copia la posizione del giocatore in Update() potrebbe essere eseguita prima che l'aggiornamento del giocatore ne abbia modificato la posizione; quindi copia quella che il giocatore aveva un fotogramma prima: la telecamera rimane indietro di un passo, e ciò può cambiare quando vengono aggiunti oggetti o la scena viene ricaricata. In LateUpdate() la copia avviene sempre dopo che il giocatore si è spostato:
public Transform player;
public Vector3 offset = new Vector3(0, 3, -6);
void LateUpdate()
{
transform.position = player.position + offset;
}La regola: sposta gli oggetti in Update() e inserisci in LateUpdate() il codice che reagisce alla posizione finale degli oggetti, come quello per telecamere, etichette e puntamento. Entrambi vengono eseguiti una volta per fotogramma e Time.deltaTime significa la stessa cosa in entrambi.
Sfida
MedioFai in modo che l’etichetta con il nome rimanga esattamente sopra il giocatore a ogni fotogramma.
- Aggiungi
void LateUpdate(), che viene eseguito dopo l’Update()di ogni script. - Sposta al suo interno la parte
if (target != null)e lascia inUpdate()solo il movimento con le frecce, sottoif (target == null).
Premi «Gioca» e tieni premuta una freccia: l’etichetta rimane proprio sopra il giocatore. Poi premi «Verifica».
Provalo tu
using UnityEngine;
public class Mover : MonoBehaviour
{
public Transform target;
public Vector3 offset;
public float speed = 4f;
void Update()
{
if (target != null)
{
transform.position = target.position + offset;
}
else
{
if (Input.GetKey(KeyCode.RightArrow))
{
transform.position += new Vector3(speed * Time.deltaTime, 0, 0);
}
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.position -= new Vector3(speed * Time.deltaTime, 0, 0);
}
}
}
}
Tutte le lezioni di Fondamenti di scripting in Unity
1Nozioni di base di C# in Unity
Ciao, UnityVariabiliI numeri decimali richiedono una fTesto nella ConsoleVariabili che ricordanoIf ed ElseConfrontare i numeriRipasso: il collezionista di monete7Cicli e metodi
Ripeti con forCicli annidatiScrivere un metodoMetodi che restituiscono valoriArrayRiepilogo: scala10Trovare gli oggetti
Trovare per nomeTagTrovare per tipoI riferimenti battono la ricercaIl null di UnityRipasso: la moneta più vicina13Progetto: Schiva i blocchi
Il corridoreBlocchi dal cielo2Fallo muovere
Posiziona il cuboMuovilo a ogni frameRuotalo ogni secondoGuidalo con i tastiRiepilogo: guida il cubo5Vettori
Somma di vettoriDirezioniSpazio locale e spazio mondoVelocità diagonaleDistanza tra gli oggettiVector3 è una structRiepilogo: pilota di droni8GameObject e componenti
Riferimenti nell'InspectorOttenere un componenteComponenti mancantiAggiungere un componenteRequireComponentMostrare e nascondereRiepilogo: interruttore della luce3L’Inspector
Campi dell’InspectorSerializeFieldNumeri decimali e MathfAttributi dell’InspectorRiepilogo: ascensore6Trasformazioni e gerarchia
Genitori e figliIssare la bandieraScalaOsservare gli oggettiMuoversi verso un puntoRiepilogo: Luna in orbita9Progetto: Acchiappa la stella
Il raccoglitoreUna stella cadente12Il ciclo di vita dello script
Awake e StartUpdate e LateUpdateOnEnable e OnDisableL'ordine del ciclo di vitaRiepilogo: Lifecycle LoggerEsercitati da solo: Playground Unity