Sök…


Syntax

  • public static GameObject Find (strängnamn);
  • public static GameObject FindGameObjectWithTag (strängtagg);
  • public static GameObject [] FindGameObjectsWithTag (strängtagg);
  • offentligt statiskt objekt FindObjectOfType (typstyp);
  • offentligt statiskt objekt [] FindObjectsOfType (typstyp);

Anmärkningar

Vilken metod du ska använda

Var försiktig när du letar efter GameObjects under körning, eftersom det kan vara resurskrävande. Speciellt: kör inte FindObjectOfType eller Find in Update, FixedUpdate eller mer generellt i en metod som kallas en eller flera tid per ram.

  • Ring runtime-metoder FindObjectOfType och Find endast vid behov
  • FindGameObjectWithTag har mycket bra prestanda jämfört med andra strängbaserade metoder. Enhet håller separata flikar på taggade objekt och frågar sådana istället för hela scenen.
  • För "statiska" GameObjects (t.ex. UI-element och prefaber) som skapats i redigeraren använder du serienummerbar GameObject-referens i redigeraren
  • Förvara dina listor över GameObjects i listan eller Arrays som du hanterar själv
  • Om du genererar en hel del GameObjects av samma typ kan du titta på Object Pooling
  • Cache dina sökresultat för att undvika att köra de dyra sökmetoderna om och om igen.

Gå djupare

Förutom de metoder som följer med Unity är det relativt enkelt att designa dina egna sök- och insamlingsmetoder.

  • Vid FindObjectsOfType() kan du låta dina skript hålla en lista över sig själva i en static samling. Det är mycket snabbare att upprepa en klar lista över objekt än att söka och inspektera objekt från scenen.

  • Eller skapa ett skript som lagrar sina instanser i en strängbaserad Dictionary , och du har ett enkelt märkningssystem du kan utöka på.

Sök efter GameObject-namn

var go = GameObject.Find("NameOfTheObject");
Fördelar Nackdelar
Lätt att använda Prestanda försämras efter antalet spelobjekt i scenen
Strängar är svaga referenser och misstänker användarfel

Söka efter GameObject-taggar

var go = GameObject.FindGameObjectWithTag("Player");
Fördelar Nackdelar
Möjligt att söka både i enstaka objekt och i hela grupper Strängar är svaga referenser och misstänker användarfel.
Relativt snabbt och effektivt Koden är inte bärbar eftersom taggar är hårdkodade i skript.

Infogats till skript i redigeringsläge

[SerializeField]
GameObject[] gameObjects;
Fördelar Nackdelar
Bra resultat Objektsamling är statisk
Bärbar kod Kan bara hänvisa till GameObjects från samma scen

Hitta GameObjects av MonoBehaviour-skript

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

FindObjectOfType() returnerar null om ingen hittas.

Fördelar Nackdelar
Starkt typad Prestanda försämras med antalet spelobjekt som behövs för att utvärdera
Möjligt att söka både i enstaka objekt och i hela grupper

Hitta GameObjects efter namn från barnobjekt

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

Find returnerar null om ingen hittas

Fördelar Nackdelar
Begränsad, väl definierad sökomfång Strängar är svaga referenser


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow