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.
Desafio
MédioFaça cada clique adicionar uma caixa a uma lista.
- Adicione
using System.Collections.Generic;e o campoList<GameObject> boxes = new List<GameObject>();. - Ao clicar, crie
boxPrefabemtransform.position + new Vector3(boxes.Count * 1.5f, 0, 0), sem rotação, e adicione-o aboxes. - 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
1Fundamentos de C# no Unity
Olá, UnityVariáveisDecimais precisam de um fTexto no ConsoleVariáveis que guardam valoresIf e ElseComparar númerosRevisão: Coletor de Moedas7Laços e Métodos
Repita com forLaços dentro de laçosEscreva um métodoMétodos que respondemArraysRevisão: Escada10Encontrando coisas
Buscar pelo nomeTagsBuscar por tipoReferências são melhores que FindO null do UnityRevisão: moeda mais próxima13Projeto: Desvie dos Blocos
O CorredorBlocos do Céu2Faça-o se mover
Posicione o cuboMova a cada quadroGire a cada segundoDirija com as teclasRecapitulando: dirija o cubo5Vetores
Somando vetoresDireçõesEspaço local e globalVelocidade diagonalDistância entre objetosVector3 é uma structRevisão: piloto de drone8GameObjects e Componentes
Referências no InspectorObter um componenteComponentes ausentesAdicionar um componenteRequireComponentMostrar e ocultarRevisão: Interruptor de luz11Prefabs e geração de objetos
Prefabs e InstantiateGerar objetos com um temporizadorGerar objetos em uma gradeListas de objetosRemover o mais recenteDestruirGeração aleatória de objetosRevisão: fogos de artifício6Transformações e hierarquia
Pais e filhosIçar a bandeiraEscalaOlhar para as coisasMover-se em direção a um pontoRevisão: Lua em órbita9Projeto: Pegue a Estrela
O PegadorUma Estrela CadentePratique por conta própria: Playground de Unity