Listen von Objekten
Teil des Abschnitts Unity-Scripting: Grundlagen der Unity-Journey von Coddy. Lektion 65 von 85.
Ein Array hat eine feste Länge, die beim Erstellen festgelegt wird. Ein Spawner weiß nicht im Voraus, wie viele Objekte er erstellen wird, deshalb speichert er sie in einer List<T>: einem Array in C#, das wachsen kann. Sie befindet sich in System.Collections.Generic, und T ist der Typ der Elemente, die sie enthält. Dieser Springbrunnen merkt sich jede Münze, die er erstellt:
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 fügt ein Element am Ende hinzu, und Count gibt an, wie viele Elemente enthalten sind; bei einem Array gibt es dafür Length. Das Lesen funktioniert wie bei einem Array: coins[0] ist die erste Münze, und foreach (GameObject c in coins) durchläuft sie alle. coins.Remove(coin) entfernt dieses Element, und coins.RemoveAt(0) entfernt das erste; die Elemente dahinter rücken um eine Stelle nach vorn.
Die Liste selbst muss mit new erstellt werden. Ein Feld, das als List<GameObject> coins; geschrieben ist, enthält null, und das erste Add bricht mit einer NullReferenceException ab.
Aufgabe
MittelLass jeden Klick eine Box zu einer Liste hinzufügen.
- Füge
using System.Collections.Generic;und das FeldList<GameObject> boxes = new List<GameObject>();hinzu. - Erzeuge bei einem Klick
boxPrefabbeitransform.position + new Vector3(boxes.Count * 1.5f, 0, 0), ohne Drehung, und füge es zuboxeshinzu. - Protokolliere
"Boxes: " + boxes.Count.
Drücke „Spielen“ und klicke dreimal: Drei Boxen stehen in einer Reihe. Drücke dann „Prüfen“.
Probier es selbst
using UnityEngine;
public class BoxStacker : MonoBehaviour
{
public GameObject boxPrefab;
// boxes: eine private List<GameObject>
void Update()
{
// Click: Erzeuge eine Box, für jede Box in der Liste 1.5 weiter rechts, füge sie hinzu und protokolliere die Anzahl
}
}
Alle Lektionen in Unity-Scripting: Grundlagen
1C#-Grundlagen in Unity
Hallo, UnityVariablenDezimalzahlen brauchen ein fText in der KonsoleVariablen, die sich etwas merkenIf und ElseZahlen vergleichenRückblick: Münzsammler7Schleifen und Methoden
Wiederholen mit forSchleifen in SchleifenEine Methode schreibenMethoden mit RückgabewertArraysRückblick: Treppe10Dinge finden
Nach Namen suchenTagsNach Typ suchenReferenzen schlagen SuchenUnitys NullRückblick: nächste Münze13Projekt: Weiche den Blöcken aus
Der LäuferBlöcke vom Himmel2Bring es in Bewegung
Platziere den WürfelBewege ihn in jedem FrameDrehe ihn jede SekundeSteuere mit den TastenRückblick: Fahre den Würfel5Vektoren
Vektoren addierenRichtungenLokaler und globaler RaumDiagonale GeschwindigkeitAbstand zwischen ObjektenVector3 ist eine StrukturRückblick: Drohnenpilot8GameObjects und Komponenten
Referenzen im InspectorEine Komponente abrufenFehlende KomponentenEine Komponente hinzufügenRequireComponentEin- und AusblendenRückblick: Lichtschalter11Prefabs und Erzeugen von Instanzen
Prefabs und InstantiateNach Zeitintervall erzeugenIn einem Raster erzeugenListen von ObjektenDas Neueste zurücknehmenZerstörenZufälliges ErzeugenRückblick: Feuerwerk14Abschließende Herausforderungen
MünzmagnetDie Straße überquerenStraßenverkehrTurmbauerLanden oder verfehlen3Der Inspector
Inspector-FelderSerializeFieldFließkommazahlen und MathfInspector-AttributeRückblick: Aufzug6Transformationen und Hierarchie
Eltern und KinderHisse die FlaggeSkalierungDinge anschauenAuf einen Punkt zubewegenRückblick: Mond in Umlaufbahn9Projekt: Fang den Stern
Der FängerEin fallender Stern12Der Lebenszyklus eines Skripts
Awake und StartUpdate und LateUpdateOnEnable und OnDisableDie Reihenfolge im LebenszyklusRückblick: Lifecycle LoggerÜbe selbstständig: Unity-Playground