Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Operazioni sui Componenti

Può capitare di voler aggiungere componenti a un GameObject a runtime, piuttosto che collegarli nell'editor. Ad esempio perché alcuni comportamenti come le collisioni non si attivino automaticamente al lancio della scena
Può capitare di voler aggiungere componenti a un GameObject a runtime, piuttosto che collegarli nell'editor. Ad esempio perché alcuni comportamenti come le collisioni non si attivino automaticamente al lancio della scena
Link copiato negli appunti

Oltre all'approccio visuale, che abbiamo esaminato introducendo GameObject e componenti, possiamo operare sui componenti attaccati ai gameObject anche da codice. Vediamo come.

Aggiungere componenti a runtime

Può capitare di voler aggiungere componenti a un gameObject a runtime, piuttosto che collegarli dentro l'editor. Tra i diversi motivi abbiamo che metodi come OnCollisionEnter vengono sempre eseguiti al lancio del gioco, anche se il componente è disabilitato (togliendo la spunta alla casellina apposita). Per evitare che certi metodi vengano prima del tempo, l'unico modo è rimuovere o aggiungere il componente a runtime solo nel momento in cui diventa davvero necessario.

Per aggiungere un componente, basta utilizzare il metodo AddComponent. Questa funzione è un "template": possiamo chiamarla in congiunzione col tipo del componente per fare in modo che ci restituisca un riferimento al componente appena creato, su cui operare subito o di cui possiamo salvare un riferimento.

Ad esempio, aggiungiamo un Rigidbody ad un cubo di nome cube1:

Rigidbody newRigidbody = cube1.AddComponent<Rigidbody>();
newRigidbody.drag = 0.1f;

Quando questa riga di codice viene eseguita sarà aggiunto un Rigidbody al cubo e questo inizierà a cadere secondo la gravità e con un drag di 0.1, ed eventualmente a collidere con altri oggetti (ammesso che abbia un Collider attivo!).

Allo stesso modo è possibile usare la funzione AddComponent in maniera generica, così:

Rigidbody newRigidbody = (Rigidbody) cube1.AddComponent(typeof(Rigidbody));

Chiaramente, come si vede nell'esempio, dovremo effettuare un cast per far capire a Unity che tipo di componente stiamo aggiungendo.

Accedere ai componenti di un oggetto

Una volta aggiunti (sia da editor che in programmazione), possiamo avere accesso a qualunque componente di un oggetto mediante la funzione GetComponent. Anche questa può essere tipizzata, in questo modo:

cube1.GetComponent<Collider>();

Rimuovere componenti

Così come è possibile aggiungere componenti, è possibile rimuoverli. Tuttavia, non esiste una funzione dedicata: si usa la funzione Destroy (utile anche per distruggere altri tipi d'oggetti). Due esempi:

Destroy(rigidbody);

//qui recuperiamo al volo un altro componente di tipo Player
Destroy(gameObject.GetComponent<Player>());

Abilitare e disabilitare componenti

Continuando il parallelo con l'editor, come possiamo abilitare e disabilitare componenti spuntando la casellina vicino al loro nome, così si può farlo in programmazione, semplicemente cambiando la proprietà enabled del componente (e i componenti possono anche disabilitarsi da soli):

rigidbody.enabled = false;
collider.enabled = true;
gameObject.GetComponent<Player>().enabled = false;

Nota: l'aggiunta di un componente fa scattare le funzioni Start ed Awake di quel componente, a meno che questo non venga disabilitato subito dopo la sua aggiunta, così:

OtherComponent n = gameObject.AddComponent<OtherComponent>();
n.enabled = false;

Ti consigliamo anche