Menu
CoddyTech

Elenchi di oggetti

Fa parte della sezione Fondamenti di scripting in Unity del percorso Unity di Coddy. Lezione 65 di 85.

Un array ha una lunghezza fissa, impostata quando viene creato. 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 inserisce un elemento alla fine e Count indica quanti ce ne sono, mentre un array ha Length. Per leggere gli elementi si procede 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 che lo seguono avanzano di una posizione.

La lista stessa deve essere creata con new. Un campo scritto come List<GameObject> coins; contiene null e la prima chiamata a Add si interrompe con un NullReferenceException.

challenge icon

Sfida

Medio

Fai in modo che ogni clic aggiunga una scatola a un elenco.

  1. Aggiungi using System.Collections.Generic; e il campo List<GameObject> boxes = new List<GameObject>();.
  2. Al clic, crea boxPrefab in transform.position + new Vector3(boxes.Count * 1.5f, 0, 0), senza rotazione, e aggiungilo a boxes.
  3. Registra "Boxes: " + boxes.Count.

Premi «Gioca» e fai clic tre volte: tre scatole si disporranno in fila. Poi premi «Verifica».

Provalo tu

using UnityEngine;

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

    void Update()
    {
        // Click: crea un box, 1.5 più a destra per ogni box nella lista, aggiungilo e registra il conteggio nel log
    }
}

Tutte le lezioni di Fondamenti di scripting in Unity

Esercitati da solo: Playground Unity