Prefab e Instantiate
Fa parte della sezione Fondamenti di scripting in Unity del percorso Unity di Coddy. Lezione 62 di 85.
Un prefab è un GameObject salvato come modello: trascina un oggetto dalla Hierarchy nella finestra Project e Unity lo memorizza con tutti i suoi componenti e i valori dell’Inspector. Il prefab in sé non si trova nella scena. Uno script lo ottiene tramite un campo, come qualsiasi altro riferimento: dichiara public GameObject parcelPrefab; e trascina il prefab su quel campo nell’Inspector.
Instantiate(prefab, position, rotation) crea una copia del prefab nella scena e la restituisce. Questo drone per le consegne rilascia un pacco nella propria posizione ogni volta che premi Spazio. Quaternion.identity significa nessuna rotazione:
public GameObject parcelPrefab;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
Instantiate(parcelPrefab, transform.position, Quaternion.identity);
}
}Ogni pressione aggiunge un altro oggetto alla Hierarchy, chiamato Parcel(Clone). Il prefab rimane com’era, quindi ogni copia parte dagli stessi valori. GetKeyDown è importante in questo caso: con GetKey, tenendo premuto Spazio per mezzo secondo, verrebbero rilasciati circa 30 pacchi, uno per fotogramma.
Sfida
MedioFai comparire una moneta sopra il giocatore a ogni clic.
- Aggiungi il campo
public GameObject coinPrefab;. La scena lo riempie con il prefab Coin. - In
Update(), quando si verificaInput.GetMouseButtonDown(0), chiamaInstantiate(coinPrefab, transform.position + new Vector3(0, 2, 0), Quaternion.identity);.
Premi «Gioca», muoviti e fai clic: ogni volta appare una moneta sopra il giocatore. Poi premi «Verifica».
Provalo tu
using UnityEngine;
public class CoinDropper : MonoBehaviour
{
public float speed = 4f;
// coinPrefab: un campo GameObject pubblico, a cui è assegnato il prefab Coin
void Update()
{
if (Input.GetKey(KeyCode.RightArrow))
{
transform.position += new Vector3(speed * Time.deltaTime, 0, 0);
}
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.position -= new Vector3(speed * Time.deltaTime, 0, 0);
}
// Click: crea una moneta 2 unità sopra il giocatore
}
}
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