Menu
CoddyTech

Elenchi di oggetti

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

Un array ha una lunghezza fissa, impostata al momento della sua creazione. Uno spawner non sa in anticipo quanti oggetti creerà, quindi li conserva in una List<T>: l'array di C# che cresce. Si trova in System.Collections.Generic e T è il tipo di elemento che contiene. Questa fontana ricorda ogni moneta che crea:

using System.Collections.Generic;
using UnityEngine;

public class CoinFountain : MonoBehaviour
{
    public GameObject coinPrefab;
    List<GameObject> coins = new List<GameObject>();

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            GameObject coin = Instantiate(coinPrefab, transform.position, Quaternion.identity);
            coins.Add(coin);
            Debug.Log(coins.Count + " coins");
        }
    }
}

Add aggiunge un elemento alla fine e Count indica quanti ce ne sono, mentre un array ha Length. La lettura funziona come con un array: coins[0] è la prima moneta e foreach (GameObject c in coins) le visita tutte. coins.Remove(coin) rimuove quell'elemento e coins.RemoveAt(0) rimuove il primo; gli elementi successivi scendono di una posizione.

La lista stessa deve essere creata con new. Un campo scritto come List<GameObject> coins; contiene null e il primo Add si interrompe con una NullReferenceException.

challenge icon

Sfida

Medio

Lo Stacker dovrebbe tenere traccia delle scatole che crea:

  • Mantieni le scatole in un campo privato List<GameObject> chiamato boxes.
  • Ogni clic genera una scatola senza rotazione e la aggiunge alla lista. Una scatola viene posizionata nella posizione dello stacker più 1.5 sull’asse x per ogni scatola già presente nella lista: la prima presso lo stacker, la successiva 1.5 alla sua destra e così via.
  • La barra spaziatrice rimuove la scatola più recente: nascondila con SetActive(false) e rimuovila dalla lista. Se non ci sono scatole, la barra spaziatrice non fa nulla.
  • Dopo ogni modifica alla lista, registra Boxes: e il conteggio, ad esempio Boxes: 3.

Premi Play, fai clic e premi la barra spaziatrice, poi Check.

Provalo tu

using UnityEngine;

public class BoxStacker : MonoBehaviour
{
    public GameObject boxPrefab;
    // boxes: una List<GameObject> privata

    void Update()
    {
        // Click: genera una scatola, 1.5 più a destra per ogni scatola nella lista, e aggiungila
        // Space: nascondi la scatola più recente e rimuovila dalla lista
        // Dopo ogni modifica, registra "Boxes: " e il conteggio
    }
}
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