Menu
CoddyTech

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 null e 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.

quiz iconMettiti alla prova

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