Elenchi di oggetti
Fa parte della sezione Fondamenti di scripting in Unity del percorso Unity di Coddy. Lezione 51 di 67.
Un array ha una lunghezza fissa, impostata al momento della sua creazione. 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 aggiunge un elemento alla fine e Count indica quanti ce ne sono, mentre un array ha Length. La lettura funziona 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 successivi scendono di una posizione.
La lista stessa deve essere creata con new. Un campo scritto come List<GameObject> coins; contiene null e il primo Add si interrompe con una NullReferenceException.
Sfida
MedioLo Stacker dovrebbe tenere traccia delle scatole che crea:
- Mantieni le scatole in un campo privato
List<GameObject>chiamatoboxes. - Ogni clic genera una scatola senza rotazione e la aggiunge alla lista. Una scatola viene posizionata nella posizione dello stacker più 1.5 sull’asse x per ogni scatola già presente nella lista: la prima presso lo stacker, la successiva 1.5 alla sua destra e così via.
- La barra spaziatrice rimuove la scatola più recente: nascondila con
SetActive(false)e rimuovila dalla lista. Se non ci sono scatole, la barra spaziatrice non fa nulla. - Dopo ogni modifica alla lista, registra
Boxes:e il conteggio, ad esempioBoxes: 3.
Premi Play, fai clic e premi la barra spaziatrice, poi Check.
Provalo tu
using UnityEngine;
public class BoxStacker : MonoBehaviour
{
public GameObject boxPrefab;
// boxes: una List<GameObject> privata
void Update()
{
// Click: genera una scatola, 1.5 più a destra per ogni scatola nella lista, e aggiungila
// Space: nascondi la scatola più recente e rimuovila dalla lista
// Dopo ogni modifica, registra "Boxes: " e il conteggio
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti di scripting in Unity
1Il tuo primo script
Ciao, UnityPosiziona il cuboMuovi a ogni frameRuota ogni secondoGuida con i tastiRiepilogo: guida il cubo4Vettori
Sommare vettoriDirezioniSpazio locale e spazio globaleVelocità diagonaleDistanza tra gli oggettiVector3 è una structRiepilogo: pilota di droni7Progetto: Acchiappa la stella
L'acchiappatoreUna stella cadente10Il ciclo di vita degli script
Awake e StartUpdate e LateUpdateOnEnable e OnDisableL’ordine del ciclo di vitaRipasso: logger del ciclo di vita2L'Inspector
Campi dell'InspectorSerializeFieldNumeri decimali e MathfAttributi dell'InspectorRiepilogo: Ascensore5Trasformazioni e gerarchia
Genitori e figliScalaGuarda gli oggettiMuoversi verso un puntoRiepilogo: Luna in orbita6Oggetti di gioco e componenti
Riferimenti nell’InspectorOttenere un componenteComponenti mancantiAggiungere un componenteRequireComponentMostrare e nascondereRipasso: interruttore della luce9Prefab e generazione di oggetti
Prefab e InstantiateGenerare oggetti con un timerGenerare oggetti in una grigliaElenchi di oggettiDistruggere oggettiGenerazioni casualiRiepilogo: fuochi d'artificio