Comprensione dei prefabbricati e istanziazione
Istanziare e distruggere oggetti è considerato molto importante durante il gioco. Istanziare significa semplicemente portare all'esistenza. Gli oggetti compaiono o "generano" nel gioco, i nemici muoiono, gli elementi della GUI scompaiono e le scene vengono caricate continuamente nel gioco. Sapere come sbarazzarsi correttamente degli oggetti non necessari e come portare quelli che fai diventa quindi ancora più essenziale.
Cerchiamo prima di capire cosa prefabssiamo. I prefabbricati sono considerati importanti per capire come funziona l'istanziazione in Unity.
Prefabs sono come blueprintsdi un GameObject. I prefabbricati sono, in un certo senso, acopydi un GameObject che può essere duplicato e inserito in una scena, anche se non esisteva al momento della realizzazione della scena; in altre parole, i prefabbricati possono essere utilizzatidynamically generate GameObjects.
Per creare un prefabbricato, devi semplicemente trascinare il GameObject desiderato dalla gerarchia delle scene nel progetto Assets.
Ora, per istanziare un GameObject, chiamiamo Instantiate()metodo nel nostro script. Questo metodo, definito inMonoBehaviour, accetta un GameObject come parametro, quindi sa quale GameObject creare / duplicare. Ha anche varie sostituzioni per cambiare la trasformazione dell'oggetto appena istanziato, così come la genitorialità.
Proviamo a creare un'istanza di un nuovo file hexagon ogni volta che il Space viene premuto il tasto.
Crea un nuovo script chiamato Instantiatore aprilo. NelUpdate metodo, digitare il codice riportato di seguito.
Qui stiamo usando il GetKeyDown metodo del Inputclasse per verificare se il giocatore ha premuto un pulsante specifico durante l'ultimo fotogramma. Dato che vogliamo che continui a controllare, lo inseriamoUpdate, che viene eseguito 60 volte al secondo. Il metodo GetKeyDown restituiscetrue se la chiave specificata da KeyCode enum (che elenca tutti i tasti possibili su una tastiera standard) viene premuto in quel frame.
public class Instantiator : MonoBehaviour {
public GameObject Hexagon;
// Update is called once per frame
void Update () {
if (Input.GetKeyDown(KeyCode.Space)) {
Instantiate(Hexagon);
}
}
}
La dichiarazione pubblica di GameObject in alto crea uno slot simile a quello che abbiamo creato per Rigidbody2D nelle nostre lezioni precedenti. Questo slot accetta soloprefabs (in tempo di redazione) e gameObjects (in runtime), tuttavia.
Salva lo script e lascia che si compili. Al termine, crea un nuovoempty GameObject accedendo al menu di scelta rapida della gerarchia degli oggetti e selezionando Create Empty.
Assegna a questo oggetto un nome riconoscibile come Instatiator Objecte allega il nostro script appena creato. Nello slot che si presenta per il GameObject, trascina il prefabbricato che abbiamo creato.
Se eseguiamo il gioco adesso, premendo la barra spaziatrice creeremo un nuovo oggetto esagonale identico a quello che abbiamo usato per creare il prefabbricato. Puoi vedere ogni esagono creato nella gerarchia degli oggetti. Il motivo per cui non puoi vederli apparire nel gioco è perché per il momento vengono tutti creatiexactly uno sull'altro.
Nella nostra prossima lezione capiremo il concetto di distruzione di oggetti.