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.
Sfida
MedioRimuovi le vecchie monete e lascia che la barra spaziatrice rimuova lo scivolo.
- Mantieni la nuova moneta,
GameObject coin = Instantiate(...);, poi chiamaDestroy(coin, 3f);. - Su
Input.GetKeyDown(KeyCode.Space), chiamaDestroy(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
1Nozioni di base di C# in Unity
Ciao, UnityVariabiliI numeri decimali richiedono una fTesto nella ConsoleVariabili che ricordanoIf ed ElseConfrontare i numeriRipasso: il collezionista di monete7Cicli e metodi
Ripeti con forCicli annidatiScrivere un metodoMetodi che restituiscono valoriArrayRiepilogo: scala10Trovare gli oggetti
Trovare per nomeTagTrovare per tipoI riferimenti battono la ricercaIl null di UnityRipasso: la moneta più vicina13Progetto: Schiva i blocchi
Il corridoreBlocchi dal cielo2Fallo muovere
Posiziona il cuboMuovilo a ogni frameRuotalo ogni secondoGuidalo con i tastiRiepilogo: guida il cubo5Vettori
Somma di vettoriDirezioniSpazio locale e spazio mondoVelocità diagonaleDistanza tra gli oggettiVector3 è una structRiepilogo: pilota di droni8GameObject e componenti
Riferimenti nell'InspectorOttenere un componenteComponenti mancantiAggiungere un componenteRequireComponentMostrare e nascondereRiepilogo: interruttore della luce11Prefab e generazione di oggetti
Prefab e InstantiateGenerare con un timerGenerare in una grigliaElenchi di oggettiEliminare il più recenteDestroyGenerazioni casualiRipasso: fuochi d'artificio3L’Inspector
Campi dell’InspectorSerializeFieldNumeri decimali e MathfAttributi dell’InspectorRiepilogo: ascensore6Trasformazioni e gerarchia
Genitori e figliIssare la bandieraScalaOsservare gli oggettiMuoversi verso un puntoRiepilogo: Luna in orbita9Progetto: Acchiappa la stella
Il raccoglitoreUna stella cadente12Il ciclo di vita dello script
Awake e StartUpdate e LateUpdateOnEnable e OnDisableL'ordine del ciclo di vitaRiepilogo: Lifecycle LoggerEsercitati da solo: Playground Unity