GEC1
Begriff · schaltung

Referenz

Ein Verweis auf ein anderes Objekt statt einer Kopie davon. Ein Skript, das eine Tür öffnen soll, braucht eine Referenz auf genau diese Tür. Leere Referenzen sind die häufigste Fehlerquelle.

Kurz

Eine Referenz zeigt auf ein bestimmtes Objekt: diese Tür, diese Lampe, dieses Prefab. Sie ist keine Kopie. Was über die Referenz geändert wird, ändert das Objekt selbst.

Im Inspector erscheint eine Referenz als Feld mit einem kleinen Kreis-Symbol rechts. Hineinziehen, was gemeint ist, aus der Hierarchy oder dem Project-Fenster:

[SerializeField] GameObject tuer;   // im Inspector die Tür hineinziehen

void Oeffnen()
{
    tuer.SetActive(false);
}

[SerializeField] zeigt ein privates Feld im Inspector an; public hat dieselbe Wirkung, öffnet das Feld aber auch für alle anderen Skripte.

Genauer

Eine Referenz, die auf nichts zeigt, hat den Wert null. Benutzt ein Skript sie trotzdem, bricht es an dieser Stelle ab, und die Console meldet einen Fehler:

Meldungheißt meist
UnassignedReferenceExceptionein Feld im Inspector ist leer geblieben
NullReferenceExceptioneine Referenz ist null, etwa weil GetComponent nichts gefunden hat
MissingReferenceExceptiondas Objekt, auf das die Referenz zeigte, wurde gelöscht

Ein Doppelklick auf die Meldung öffnet die Zeile im Code. Oft fehlt dann eine Zuweisung im Inspector.

Referenzen lassen sich auch per Code holen. GetComponent<Rigidbody>() sucht eine Component am selben GameObject und liefert null, wenn es keine gibt.

In Unity sehen

  • Ein GameObject in ein Feld ziehen, das eine Component erwartet (etwa Rigidbody): Unity nimmt die passende Component dieses Objekts. Hat es keine, lässt sich das Objekt nicht hineinziehen.
  • Im Kit sind Referenzen die ◆-Anschlüsse. Sie zeigen auf Objekte in der Szene; ein leerer ◆ wird als Problem gemeldet.
  • Das Symbol ◆ und die blaugrüne Farbe stehen im ganzen Kurs für Referenzen.

Weiterlesen