Menu
CoddyTech

Prefab e Instantiate

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

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 ne ottiene uno 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 di consegna 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 qui: con GetKey, tenendo premuto Spazio per mezzo secondo, rilasceresti circa 30 pacchi, uno per frame.

challenge icon

Sfida

Medio

Le frecce muovono già il giocatore. Fai in modo che ogni clic generi una moneta sopra di lui:

  • Aggiungi un campo pubblico GameObject chiamato coinPrefab. La scena lo riempie con il prefab Coin non appena il campo esiste.
  • Quando fai clic con il pulsante sinistro del mouse, genera una copia della moneta 2 unità sopra il giocatore, senza rotazione.

Premi Play, muoviti e fai clic alcune volte, poi Check.

Provalo tu

using UnityEngine;

public class CoinDropper : MonoBehaviour
{
    public float speed = 4f;
    // coinPrefab: un campo público GameObject al que se asigna el 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 moneda 2 unidades por encima del jugador
    }
}
quiz iconMettiti alla prova

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