Menu
CoddyTech

Listas de objetos

Parte da seção Noções básicas de scripting no Unity do Journey de Unity da Coddy. Lição 51 de 67.

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 há, enquanto um array tem Length. A leitura funciona como em um array: coins[0] é a primeira moeda, e foreach (GameObject c in coins) visita 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 escrito como List<GameObject> coins; contém null, e o primeiro Add é interrompido com uma NullReferenceException.

challenge icon

Desafio

Médio

O Stacker deve acompanhar as caixas que cria:

  • Mantenha as caixas em um campo privado List<GameObject> chamado boxes.
  • Cada clique cria uma caixa sem rotação e a adiciona à lista. A caixa fica na posição do empilhador mais 1.5 no eixo x para cada caixa que já estiver na lista: a primeira na posição do empilhador, a próxima 1.5 à direita dela, e assim por diante.
  • A tecla Space remove a caixa mais recente: oculte-a com SetActive(false) e remova-a da lista. Se não houver caixas, Space não faz nada.
  • Após cada alteração na lista, registre Boxes: e a quantidade, por exemplo, Boxes: 3.

Pressione Play, clique e pressione Space, depois Check.

Experimente você mesmo

using UnityEngine;

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

    void Update()
    {
        // Clique: crie uma caixa 1.5 mais à direita para cada caixa na lista e adicione-a à lista
        // Espaço: oculte a caixa mais recente e remova-a da lista
        // Após cada alteração, registre "Boxes: " e a quantidade
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Noções básicas de scripting no Unity