Elenchi di oggetti
Fa parte della sezione Fondamenti di scripting in Unity del percorso Unity di Coddy. Lezione 65 di 85.
Un array ha una lunghezza fissa, impostata quando viene creato. Uno spawner non sa in anticipo quanti oggetti creerà, quindi li conserva in una List<T>: l'array di C# che cresce. Si trova in System.Collections.Generic e T è il tipo di elemento che contiene. Questa fontana ricorda ogni moneta che 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 inserisce un elemento alla fine e Count indica quanti ce ne sono, mentre un array ha Length. Per leggere gli elementi si procede come con un array: coins[0] è la prima moneta e foreach (GameObject c in coins) le visita tutte. coins.Remove(coin) rimuove quell'elemento e coins.RemoveAt(0) rimuove il primo; gli elementi che lo seguono avanzano di una posizione.
La lista stessa deve essere creata con new. Un campo scritto come List<GameObject> coins; contiene null e la prima chiamata a Add si interrompe con un NullReferenceException.
Sfida
MedioFai in modo che ogni clic aggiunga una scatola a un elenco.
- Aggiungi
using System.Collections.Generic;e il campoList<GameObject> boxes = new List<GameObject>();. - Al clic, crea
boxPrefabintransform.position + new Vector3(boxes.Count * 1.5f, 0, 0), senza rotazione, e aggiungilo aboxes. - Registra
"Boxes: " + boxes.Count.
Premi «Gioca» e fai clic tre volte: tre scatole si disporranno in fila. Poi premi «Verifica».
Provalo tu
using UnityEngine;
public class BoxStacker : MonoBehaviour
{
public GameObject boxPrefab;
// boxes: una List<GameObject> privata
void Update()
{
// Click: crea un box, 1.5 più a destra per ogni box nella lista, aggiungilo e registra il conteggio nel log
}
}
Tutte le lezioni di Fondamenti di scripting in Unity
1Nozioni di base di C# in Unity
Ciao, UnityVariabiliI numeri decimali richiedono una fTesto nella ConsoleVariabili che ricordanoIf ed ElseConfrontare i numeriRipasso: il collezionista di monete7Cicli e metodi
Ripeti con forCicli annidatiScrivere un metodoMetodi che restituiscono valoriArrayRiepilogo: scala10Trovare gli oggetti
Trovare per nomeTagTrovare per tipoI riferimenti battono la ricercaIl null di UnityRipasso: la moneta più vicina13Progetto: Schiva i blocchi
Il corridoreBlocchi dal cielo2Fallo muovere
Posiziona il cuboMuovilo a ogni frameRuotalo ogni secondoGuidalo con i tastiRiepilogo: guida il cubo5Vettori
Somma di vettoriDirezioniSpazio locale e spazio mondoVelocità diagonaleDistanza tra gli oggettiVector3 è una structRiepilogo: pilota di droni8GameObject e componenti
Riferimenti nell'InspectorOttenere un componenteComponenti mancantiAggiungere un componenteRequireComponentMostrare e nascondereRiepilogo: interruttore della luce11Prefab e generazione di oggetti
Prefab e InstantiateGenerare con un timerGenerare in una grigliaElenchi di oggettiEliminare il più recenteDestroyGenerazioni casualiRipasso: fuochi d'artificio3L’Inspector
Campi dell’InspectorSerializeFieldNumeri decimali e MathfAttributi dell’InspectorRiepilogo: ascensore6Trasformazioni e gerarchia
Genitori e figliIssare la bandieraScalaOsservare gli oggettiMuoversi verso un puntoRiepilogo: Luna in orbita9Progetto: Acchiappa la stella
Il raccoglitoreUna stella cadente12Il ciclo di vita dello script
Awake e StartUpdate e LateUpdateOnEnable e OnDisableL'ordine del ciclo di vitaRiepilogo: Lifecycle LoggerEsercitati da solo: Playground Unity