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.
Desafio
MédioO Stacker deve acompanhar as caixas que cria:
- Mantenha as caixas em um campo privado
List<GameObject>chamadoboxes. - 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
}
}
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
1Seu primeiro script
Olá, UnityPosicione o cuboMova a cada quadroGire a cada segundoConduza com as teclasRecapitulando: dirija o cubo4Vetores
Adicionando vetoresDireçõesEspaço local e espaço do mundoVelocidade diagonalDistância entre objetosVector3 é uma structRevisão: piloto de drone7Projeto: Pegue a Estrela
O ApanhadorUma Estrela Cadente10O ciclo de vida dos scripts
Awake e StartUpdate e LateUpdateOnEnable e OnDisableA ordem do ciclo de vidaRevisão: registrador do ciclo de vida5Transformações e Hierarquia
Pais e FilhosEscalaObserve as CoisasMova-se em Direção a um PontoRevisão: Lua em Órbita6GameObjects e Componentes
Referências no InspectorObter um ComponenteComponentes AusentesAdicionar um ComponenteRequireComponentMostrar e OcultarRevisão: Interruptor de Luz9Prefabs e criação de objetos
Prefabs e InstantiateCriar objetos com um temporizadorCriar objetos em uma gradeListas de objetosDestruirCriação aleatória de objetosRevisão: fogos de artifício