Referenzen schlagen Suchen
Teil des Abschnitts Unity-Scripting: Grundlagen der Unity-Journey von Coddy. Lektion 59 von 85.
Ein Skript kann auf vier Arten auf ein anderes Objekt zugreifen: über ein im Inspector festgelegtes Feld, über die Suche nach Namen mit GameObject.Find, über eine Tagsuche oder über die Suche nach Typ mit FindAnyObjectByType. Für ein Objekt, das von Anfang an in der Szene vorhanden ist, verwendet Unity-Code aus drei Gründen das Inspector-Feld:
- Geschwindigkeit. Die Referenz wird vor dem Spielstart zugewiesen. Jede Suche durchsucht die Objekte der Szene, und eine Suche in
Update()geschieht in jedem Frame. - Sicherheit. Ein Name in einer Zeichenfolge wird ungültig, wenn jemand das Objekt umbenennt: Find gibt
nullzurück, und der Fehler tritt später in der Zeile auf, die den Namen verwendet. Ein leeres Inspector-Feld führt zu einer UnassignedReferenceException, die das Feld und das Skript nennt. - Übersichtlichkeit. Im Inspector ist sichtbar, wovon ein Skript abhängt. Ein Find-Aufruf verbirgt diese Abhängigkeit im Code.
// einmal im Inspector festlegen: keine Suche, und eine Umbenennung ändert nichts
[SerializeField] private Transform door;
// wird in jedem Frame gesucht und ist null, nachdem die Tür umbenannt wurde
void Update()
{
Transform d = GameObject.Find("Door").transform;
}Suchvorgänge haben ihren Platz: bei Objekten, die erst während des Spiels existieren, etwa wenn eines während des Spielens gespawnt wird, und bei Skripten, die in jeder Szene funktionieren müssen. Suche auch dann nur einmal in Start() und speichere das Ergebnis in einem Feld.
Probier es selbst
Diese Lektion enthält keine Programmieraufgabe.
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