Zoeken…


Syntaxis

  • openbare statische GameObject Find (stringnaam);
  • openbare statische GameObject FindGameObjectWithTag (string-tag);
  • public static GameObject [] FindGameObjectsWithTag (string-tag);
  • public static Object FindObjectOfType (Type type);
  • public static Object [] FindObjectsOfType (Type type);

Opmerkingen

Welke methode te gebruiken

Wees voorzichtig tijdens het zoeken naar GameObjects tijdens runtime, omdat dit veel bronnen kan kosten. Vooral: voer FindObjectOfType of Find in Update, FixedUpdate of meer in het algemeen niet uit in een methode die een of meer tijd per frame wordt genoemd.

  • Runtime-methoden FindObjectOfType en Find alleen wanneer nodig
  • FindGameObjectWithTag heeft zeer goede prestaties in vergelijking met andere op snaren gebaseerde methoden. Unity houdt gescheiden tabbladen bij van getagde objecten en vraagt deze in plaats van de hele scène.
  • Voor "statische" GameObjects (zoals UI-elementen en prefabs) die in de editor zijn gemaakt, gebruikt u de serializable GameObject-referentie in de editor
  • Houd uw lijsten met GameObjects in Lijst of Arrays die u zelf beheert
  • Over het algemeen, als u veel GameObjects van hetzelfde type instantieert, kijk dan eens naar Object Pooling
  • Cache uw zoekresultaten om te voorkomen dat u de dure zoekmethoden steeds opnieuw uitvoert.

Dieper gaan

Naast de methoden die bij Unity worden geleverd, is het relatief eenvoudig om uw eigen zoek- en verzamelmethoden te ontwerpen.

  • In het geval van FindObjectsOfType() kunt u ervoor zorgen dat uw scripts een lijst van zichzelf bijhouden in een static verzameling. Het is veel sneller om een kant-en-klare lijst met objecten te doorlopen dan om objecten uit de scène te zoeken en te inspecteren.

  • Of maak een script dat hun instanties opslaat in een stringgebaseerd Dictionary , en je hebt een eenvoudig tagging-systeem dat je kunt uitbreiden.

Zoeken op naam van GameObject

var go = GameObject.Find("NameOfTheObject");
Pros Cons
Makkelijk te gebruiken De prestaties nemen af met het aantal gameobjecten in scène
Tekenreeksen zijn zwakke verwijzingen en verdacht op gebruikersfouten

Zoeken op tags van GameObject

var go = GameObject.FindGameObjectWithTag("Player");
Pros Cons
Mogelijk om zowel afzonderlijke objecten als hele groepen te doorzoeken Tekenreeksen zijn zwakke verwijzingen en verdacht op gebruikersfouten.
Relatief snel en efficiënt Code is niet overdraagbaar omdat tags hard zijn gecodeerd in scripts.

Ingevoegd in scripts in de bewerkingsmodus

[SerializeField]
GameObject[] gameObjects;
Pros Cons
Goed optreden Objectverzameling is statisch
Draagbare code Kan alleen verwijzen naar GameObjects uit dezelfde scène

GameObjects vinden door MonoBehaviour-scripts

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

FindObjectOfType() retourneert null als er geen is gevonden.

Pros Cons
Sterk getypt De prestaties nemen af met het aantal gameobjecten dat nodig is om te evalueren
Mogelijk om zowel afzonderlijke objecten als hele groepen te doorzoeken

Zoek GameObjects op naam uit onderliggende objecten

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

Find retourneert null als er geen is gevonden

Pros Cons
Beperkte, goed gedefinieerde zoekbereik Strings zijn zwakke referenties


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow