Menu
CoddyTech

Aggiungere un componente

Fa parte della sezione Fondamenti di scripting in Unity del percorso Unity di Coddy. Lezione 46 di 85.

gameObject.AddComponent<T>() aggiunge un nuovo componente di tipo T all'oggetto mentre il gioco è in esecuzione e lo restituisce, così puoi configurarlo nelle righe successive. Appartiene al GameObject, a cui uno script accede tramite gameObject. Quando il gioco si avvia, questo falò si illumina di una calda luce arancione:

void Start()
{
    Light glow = gameObject.AddComponent<Light>();
    glow.color = new Color(1f, 0.5f, 0f);
    glow.intensity = 2f;
}

Un componente aggiunto in questo modo rimane attivo mentre il gioco è in esecuzione. Interrompi «Gioca» e l'oggetto torna allo stato salvato nella scena, senza Light. Anche i tuoi script sono componenti: gameObject.AddComponent<Spinner>() aggiunge uno Spinner che inizia a funzionare come qualsiasi altro script.

La maggior parte dei componenti può essere aggiunta più di una volta, ma alcuni no: un oggetto può contenere al massimo un Rigidbody e, se ne richiedi un secondo, nella Console appare un avviso: Can't add component 'Rigidbody'. Il codice che potrebbe essere eseguito più di una volta verifica se l'oggetto possiede già il componente prima di aggiungerlo.

challenge icon

Sfida

Medio

Lo spazio scuote la palma e la noce di cocco cade.

  1. In Update(), quando si verifica Input.GetKeyDown(KeyCode.Space), aggiungi un Rigidbody con gameObject.AddComponent<Rigidbody>().
  2. Aggiungilo solo se la noce di cocco non ne ha già uno: !TryGetComponent(out Rigidbody rb). Una seconda pressione della barra spaziatrice non aggiunge un secondo Rigidbody.

Premi «Gioca» e premi la barra spaziatrice: la noce di cocco cade sulla sabbia. Poi premi «Verifica».

Provalo tu

using UnityEngine;

public class CoconutDrop : MonoBehaviour
{
    void Update()
    {
        // Space: aggiungi un Rigidbody, se la noce di cocco non ne ha ancora uno
    }
}

Tutte le lezioni di Fondamenti di scripting in Unity

Esercitati da solo: Playground Unity