Menu
CoddyTech

Listas de objetos

Parte de la sección Fundamentos de scripting en Unity del Journey de Unity de Coddy. Lección 65 de 85.

Una matriz tiene una longitud fija, establecida cuando se crea. Un generador no sabe de antemano cuántos objetos creará, así que los guarda en una List<T>: la matriz de C# que crece. Está en System.Collections.Generic, y T es el tipo de elemento que contiene. Esta fuente recuerda cada moneda que 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 coloca un elemento al final, y Count indica cuántos hay, mientras que una matriz tiene Length. La lectura funciona igual que con una matriz: coins[0] es la primera moneda, y foreach (GameObject c in coins) las recorre todas. coins.Remove(coin) elimina ese elemento y coins.RemoveAt(0) elimina el primero; los elementos que vienen después avanzan una posición.

La lista en sí debe crearse con new. Un campo escrito como List<GameObject> coins; contiene null, y el primer Add se detiene con una NullReferenceException.

challenge icon

Desafío

Intermedio

Haz que cada clic añada una caja a una lista.

  1. Añade using System.Collections.Generic; y el campo List<GameObject> boxes = new List<GameObject>();.
  2. Al hacer clic, crea boxPrefab en transform.position + new Vector3(boxes.Count * 1.5f, 0, 0), sin rotación, y añádelo a boxes.
  3. Registra "Boxes: " + boxes.Count.

Pulsa «Jugar» y haz clic tres veces: aparecerán tres cajas alineadas en una fila. Después, pulsa «Comprobar».

Pruébalo tú mismo

using UnityEngine;

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

    void Update()
    {
        // Click: crea una caja 1.5 más a la derecha por cada caja de la lista, añádela y registra la cantidad
    }
}

Todas las lecciones de Fundamentos de scripting en Unity

Practica por tu cuenta: Playground de Unity