Menu
CoddyTech

Referenzen schlagen Find

Teil des Abschnitts Grundlagen des Scripting in Unity der Unity-Journey von Coddy. Lektion 45 von 67.

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 null zurü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.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen des Scripting in Unity