Suche…


Syntax

  • public static GameObject Find (Name der Zeichenfolge);
  • public static GameObject FindGameObjectWithTag (String-Tag);
  • public static GameObject [] FindGameObjectsWithTag (String-Tag);
  • public static Object FindObjectOfType (Type-Typ);
  • public static Object [] FindObjectsOfType (Type-Typ);

Bemerkungen

Welche Methode ist zu verwenden?

Seien Sie vorsichtig, wenn Sie zur Laufzeit nach GameObjects suchen, da dies Ressourcen verbrauchen kann. Insbesondere: Führen Sie FindObjectOfType oder Find in Update, FixedUpdate oder allgemeiner nicht in einer Methode aus, die einmal oder mehrmals pro Frame aufgerufen wird.

  • Rufen Sie die Laufzeitmethoden FindObjectOfType und Find nur bei Bedarf auf
  • FindGameObjectWithTag hat im Vergleich zu anderen string-basierten Methoden eine sehr gute Leistung. Unity führt getrennte Registerkarten für markierte Objekte und fragt diese anstelle der gesamten Szene ab.
  • Für "statische" GameObjects (z. B. UI-Elemente und Prefabs), die im Editor erstellt wurden, verwenden Sie die serialisierbare GameObject-Referenz im Editor
  • Behalten Sie Ihre Listen von GameObjects in Listen oder Arrays, die Sie selbst verwalten
  • Wenn Sie viele GameObjects desselben Typs instanziieren, werfen Sie einen Blick auf Object Pooling
  • Zwischenspeichern Sie Ihre Suchergebnisse, um zu vermeiden, dass die teuren Suchmethoden immer wieder ausgeführt werden.

Tiefer gehen

Abgesehen von den mit Unity gelieferten Methoden ist es relativ einfach, eigene Such- und Erfassungsmethoden zu erstellen.

  • Im Falle von FindObjectsOfType() können Sie Ihre Skripte in einer static Auflistung eine Liste von sich selbst FindObjectsOfType() . Das Durchlaufen einer fertigen Objektliste ist viel schneller als das Durchsuchen und Untersuchen von Objekten in der Szene.

  • Oder erstellen Sie ein Skript, das ihre Instanzen in einem auf Zeichenfolgen basierenden Dictionary speichert, und Sie verfügen über ein einfaches Tagging-System, das Sie erweitern können.

Suche nach dem Namen von GameObject

var go = GameObject.Find("NameOfTheObject");
Pros Cons
Einfach zu verwenden Die Leistung nimmt mit der Anzahl der Spielobjekte in der Szene ab
Zeichenfolgen sind schwache Referenzen und verdächtigen Benutzerfehler

Suche nach den Tags von GameObject

var go = GameObject.FindGameObjectWithTag("Player");
Pros Cons
Es können sowohl einzelne Objekte als auch ganze Gruppen durchsucht werden Zeichenfolgen sind schwache Referenzen und verdächtigen Benutzerfehler.
Relativ schnell und effizient Code ist nicht portierbar, da Tags in Skripts hart codiert sind.

Im Bearbeitungsmodus in Skripts eingefügt

[SerializeField]
GameObject[] gameObjects;
Pros Cons
Gute Leistung Die Objektauflistung ist statisch
Tragbarer Code Kann sich nur auf GameObjects aus derselben Szene beziehen

Finden von GameObjects anhand von MonoBehaviour-Skripts

ExampleScript script = GameObject.FindObjectOfType<ExampleScript>();
GameObject go = script.gameObject;

FindObjectOfType() gibt null wenn keiner gefunden wird.

Pros Cons
Stark getippt Die Leistung nimmt mit der Anzahl der für die Bewertung benötigten Spielobjekte ab
Es können sowohl einzelne Objekte als auch ganze Gruppen durchsucht werden

Finden Sie GameObjects nach Namen aus untergeordneten Objekten

Transform tr = GetComponent<Transform>().Find("NameOfTheObject");
GameObject go = tr.gameObject;

Find gibt null wenn keiner gefunden wird

Pros Cons
Begrenzter, klar definierter Suchumfang Strings sind schwache Referenzen


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow