Distruggere oggetti
Fa parte della sezione Fondamenti di scripting in Unity del percorso Unity di Coddy. Lezione 52 di 67.
Destroy(obj) rimuove un GameObject dalla scena, compresi i figli. Un secondo argomento ne ritarda la rimozione: Destroy(obj, 2f) lo rimuove tra 2 secondi, mentre lo script che ha chiamato il metodo prosegue subito. Questo cannone spara premendo Space 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 posto. 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
MedioLo scivolo fa cadere una moneta ogni secondo; questa parte è già scritta. Modificalo in modo che:
- ogni moneta scompaia 3 secondi dopo essere apparsa, così non ci sono mai più di 3 monete contemporaneamente;
- la barra spaziatrice distrugga lo scivolo stesso, così non arrivano altre monete. Le monete già uscite continuano a scomparire in tempo.
Premi Play, osserva per qualche secondo, premi la barra spaziatrice, poi Check.
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;
}
// Space: distruggi lo scivolo
}
}
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
1Il tuo primo script
Ciao, UnityPosiziona il cuboMuovi a ogni frameRuota ogni secondoGuida con i tastiRiepilogo: guida il cubo4Vettori
Sommare vettoriDirezioniSpazio locale e spazio globaleVelocità diagonaleDistanza tra gli oggettiVector3 è una structRiepilogo: pilota di droni7Progetto: Acchiappa la stella
L'acchiappatoreUna stella cadente10Il ciclo di vita degli script
Awake e StartUpdate e LateUpdateOnEnable e OnDisableL’ordine del ciclo di vitaRipasso: logger del ciclo di vita2L'Inspector
Campi dell'InspectorSerializeFieldNumeri decimali e MathfAttributi dell'InspectorRiepilogo: Ascensore5Trasformazioni e gerarchia
Genitori e figliScalaGuarda gli oggettiMuoversi verso un puntoRiepilogo: Luna in orbita6Oggetti di gioco e componenti
Riferimenti nell’InspectorOttenere un componenteComponenti mancantiAggiungere un componenteRequireComponentMostrare e nascondereRipasso: interruttore della luce9Prefab e generazione di oggetti
Prefab e InstantiateGenerare oggetti con un timerGenerare oggetti in una grigliaElenchi di oggettiDistruggere oggettiGenerazioni casualiRiepilogo: fuochi d'artificio