Menu
CoddyTech

Listas de objetos

Parte da seção Fundamentos de Scripting no Unity do Journey de Unity da Coddy. Lição 65 de 85.

Um array tem um tamanho fixo, definido quando é criado. Um gerador não sabe de antemão quantos objetos vai criar, então os mantém em uma List<T>: o array do C# que cresce. Ela fica em System.Collections.Generic, e T é o tipo de item que ela contém. Esta fonte se lembra de cada moeda que cria:

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 um item no final, e Count informa quantos itens há; em um array, essa propriedade é Length. A leitura funciona como em um array: coins[0] é a primeira moeda, e foreach (GameObject c in coins) percorre todas elas. coins.Remove(coin) remove esse item, e coins.RemoveAt(0) remove o primeiro; os itens depois dele avançam uma posição.

A própria lista precisa ser criada com new. Um campo declarado como List<GameObject> coins; contém null, e o primeiro Add termina com uma NullReferenceException.

challenge icon

Desafio

Médio

Faça cada clique adicionar uma caixa a uma lista.

  1. Adicione using System.Collections.Generic; e o campo List<GameObject> boxes = new List<GameObject>();.
  2. Ao clicar, crie boxPrefab em transform.position + new Vector3(boxes.Count * 1.5f, 0, 0), sem rotação, e adicione-o a boxes.
  3. Registre "Boxes: " + boxes.Count.

Pressione “Jogar” e clique três vezes: três caixas ficam em uma fila. Depois, pressione “Verificar”.

Experimente você mesmo

using UnityEngine;

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

    void Update()
    {
        // Click: instancie uma caixa, posicionando-a 1.5 mais à direita para cada caixa na lista; adicione-a à lista e registre a quantidade
    }
}

Todas as lições de Fundamentos de Scripting no Unity

Pratique por conta própria: Playground de Unity