Menu
CoddyTech

Destroy

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

Destroy(obj) rimuove un GameObject dalla scena, inclusi i figli. Un secondo argomento ne ritarda la rimozione: Destroy(obj, 2f) lo rimuove tra 2 secondi e lo script che l'ha chiamato prosegue subito. Questo cannone spara premendo la barra spaziatrice e ogni proiettile che crea scompare 2 secondi dopo:

public GameObject bulletPrefab;

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        GameObject bullet = Instantiate(bulletPrefab, transform.position, Quaternion.identity);
        Destroy(bullet, 2f);
    }
}

Passa la copia, non il prefab: Destroy(bulletPrefab) viene rifiutato con Destroying assets is not permitted to avoid data loss. E passa un GameObject quando intendi l'oggetto. All'interno di uno script, gameObject è l'oggetto su cui si trova lo script, quindi Destroy(gameObject) rimuove quell'oggetto, mentre Destroy(this) rimuove solo lo script e lascia l'oggetto al suo posto.

La distruzione non avviene mai sul momento. Unity rimuove l'oggetto alla fine del frame corrente, dopo le chiamate a Update() e LateUpdate() del frame, quindi le righe successive a Destroy vengono comunque eseguite e l'oggetto può ancora essere trovato fino alla fine del frame.

challenge icon

Sfida

Medio

Rimuovi le vecchie monete e lascia che la barra spaziatrice rimuova lo scivolo.

  1. Mantieni la nuova moneta, GameObject coin = Instantiate(...);, poi chiama Destroy(coin, 3f);.
  2. Su Input.GetKeyDown(KeyCode.Space), chiama Destroy(gameObject);. Destroy(this) rimuoverebbe solo lo script.

Premi «Gioca»: ogni moneta scompare dopo 3 secondi e la barra spaziatrice impedisce di crearne altre. Poi premi «Verifica».

Provalo tu

using UnityEngine;

public class CoinChute : MonoBehaviour
{
    public GameObject coinPrefab;
    public float interval = 1f;
    float timer;

    void Update()
    {
        timer += Time.deltaTime;
        if (timer >= interval)
        {
            Instantiate(coinPrefab, transform.position, Quaternion.identity);
            timer -= interval;
        }

        // Spazio: distruggi lo scivolo
    }
}

Tutte le lezioni di Fondamenti di scripting in Unity

Esercitati da solo: Playground Unity