2013-04-23 14 views
7

Ich habe ein gameobject welches ich bei einer bestimmten Bedingung aktivieren möchte. Ich gab es ein einzigartiges Tag und ich versuchte mit GameObject.FindObjectWithTag("Tag name"). Von was ich sagen kann, wird diese Methode nur aktive Spielobjekte in der Szene und nicht inaktive finden.finde inaktives gameobject nach tag in unity3d

Gibt es eine Methode, die ich aufrufen kann, die auch inaktive Spielobjekte suchen wird? (Vorzugsweise nach dem Tag suchen).

Danke!

Antwort

12

Nach einiger Forschung scheint es, dass es kein Weg gibt, ein inaktives Spielobjekt per Tag zu finden.

Lösungen jedoch existieren inaktiv Gameobjects zuzugreifen:

1 - Shop inaktive Objekte im Spiel in einem Array, wenn man sie danach muß reaktivieren (gilt nur Objekte zur Laufzeit inaktiviert zum Spiel).

2 - Deaktivieren Sie das Spielobjekt nicht, deaktivieren Sie einfach die Komponenten, die inaktiv sein sollen. Wenn Sie das Objekt verschwinden lassen möchten, deaktivieren Sie den Renderer. Wenn es sich um ein bestimmtes Skript handelt, deaktivieren Sie dieses Skript usw.

Mit dieser Lösung können Sie ein Spielobjekt immer noch anhand seines Tag-Namens finden.

+0

Marke es als richtig, weil es in der Tat die richtige Antwort ist. – Heisenbug

+0

Sicher ist richtig. Das inaktive Objekt kann nicht gefunden werden. Muss Referenz speichern. –

+0

Das ist falsch. Sie können inaktive Objekte erhalten. Siehe Kommentar unten. RTFM. – Alex

1

FindObjectsOfTypeAll findet nicht aktiv, es kann auch vorgefertigte Objekte und Dinge finden, die Sie nicht suchen, also müssen Sie vorsichtig sein.

+0

Ja, und es ist sehr langsam – RedOrav

5

Dinge, die inaktiv gameObjects finden:

transform.Find() or transform.FindChild() 
transform.GetComponentsInChildren<Component>(true) 

Resources.FindObjectsOfTypeAll<Component>() 

For more details.

+0

@kleopatra: Sry. ... Ich werde es mir merken. :) – Vineet

+0

Während dies inaktive Objekte finden kann, wird es keine Objekte nach Tag finden, was ich tatsächlich gefragt habe. – kUr4m4

+0

Verwenden Sie 'Resources.FindObjectsOfTypeAll () 'nicht, wenn Sie nicht wissen, was Sie tun. Dies betrifft alles in Ressourcen, einschließlich Prefabs. Das bedeutet, dass Sie ** dauerhafte Änderungen ** an Ihren Dateien und außerhalb der Szene vornehmen werden, auch wenn Sie nicht mehr spielen. –