I riferimenti sono meglio di Find
Fa parte della sezione Fondamenti di scripting in Unity del percorso Unity di Coddy. Lezione 45 di 67.
Uno script può raggiungere un altro oggetto in quattro modi: un campo impostato nell'Inspector, una ricerca di GameObject.Find per nome, una ricerca per tag oppure una ricerca di FindAnyObjectByType per tipo. Per un oggetto presente nella scena fin dall'inizio, il codice Unity usa il campo dell'Inspector per tre motivi:
- Velocità. Il riferimento viene assegnato prima dell'avvio del gioco. Ogni ricerca esamina gli oggetti della scena e una ricerca in
Update()lo fa a ogni frame. - Sicurezza. Un nome in una stringa non è più valido quando qualcuno rinomina l'oggetto: Find restituisce
nulle l'errore compare più tardi, sulla riga che lo usa. Un campo dell'Inspector vuoto genera UnassignedReferenceException, che indica il campo e lo script. - Chiarezza. L'Inspector mostra da cosa dipende uno script. Una chiamata a Find lo nasconde nel codice.
// impostato una sola volta nell'Inspector: nessuna ricerca e la rinomina non cambia nulla
[SerializeField] private Transform door;
// cercato a ogni frame e null dopo che door viene rinominata
void Update()
{
Transform d = GameObject.Find("Door").transform;
}Le ricerche hanno la loro utilità: per gli oggetti che esistono solo quando il gioco è in esecuzione, come uno generato durante il gioco, e per gli script che devono funzionare in qualsiasi scena. Anche in questi casi, esegui la ricerca una volta in Start() e conserva il risultato in un campo.
Provalo tu
Questa lezione non include una sfida di codice.
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti di scripting in Unity
1Il tuo primo script
Ciao, UnityPosiziona il cuboMuovi a ogni frameRuota ogni secondoGuida con i tastiRiepilogo: guida il cubo4Vettori
Sommare vettoriDirezioniSpazio locale e spazio globaleVelocità diagonaleDistanza tra gli oggettiVector3 è una structRiepilogo: pilota di droni7Progetto: Acchiappa la stella
L'acchiappatoreUna stella cadente10Il ciclo di vita degli script
Awake e StartUpdate e LateUpdateOnEnable e OnDisableL’ordine del ciclo di vitaRipasso: logger del ciclo di vita2L'Inspector
Campi dell'InspectorSerializeFieldNumeri decimali e MathfAttributi dell'InspectorRiepilogo: Ascensore5Trasformazioni e gerarchia
Genitori e figliScalaGuarda gli oggettiMuoversi verso un puntoRiepilogo: Luna in orbita8Trovare gli oggetti
Trova per nomeTagTrova per tipoI riferimenti sono meglio di FindIl null di UnityRipasso: la moneta più vicina6Oggetti di gioco e componenti
Riferimenti nell’InspectorOttenere un componenteComponenti mancantiAggiungere un componenteRequireComponentMostrare e nascondereRipasso: interruttore della luce