2013-08-11 2 views
6

Ich muss ein Prefab im Lauf instanziieren und zerstören. Ich versuchte diese:Instantiate und Destroy Unity3D

public Transform prefab;  //I attached a prefab in Unity Editor 

Object o = Instantiate(prefab); 
//using this I cannot get the transform component (I don't know why) so useless 

Transform o=(Transform)Instantiate(prefab); 
//gives transform and transform component cannot be destroyed 

GameObject o=(GameObject)Instantiate(prefab); 
//invalid cast 

So, wie man das macht?

+0

Sie müssen einige OO-Konzept studieren. Es geht nur um variable TYPE. – Chchwy

Antwort

3

Sie müssen erklären Sie keine Instanz als Objekt, wenn Sie das tun Sie die Vorfahren Objekt Hexe es nicht die Transforma Komponente erhalten.

public GameObject prefab; 
GameObject obj = Instantiate(prefab); 

, wenn Sie erhalten componant verwandeln möchten geben Sie einfach obj.transform , wenn Sie den Objekttyp Destroy(obj);

Hoffnung Destry möchten, die Frieden

+0

kann nicht implizit konvertieren ... also habe ich dort (GameObject) hinzugefügt und es lief erfolgreich, aber ich muss noch ein paar Dinge überprüfen und dann implementieren –

3

gibt transformieren und zu transformieren Komponente nicht

die GameObject die Transform Komponente zu dem Zerstören zerstört ist an:

GameObject.Destroy(o.gameObject); 

Instantiate Methode liefert die gleiche Art von dem Objekt übergeben, wie Parameter. Da es ein Transform ist, können Sie es nicht auf GameObject werfen. Versuchen Sie folgendes:

GameObject o=((Transform)Instantiate(prefab)).gameObject; 
+0

es sagt, kann nicht von der Quelle zum Ziel zu werfen –

+0

Welcher Teil? Beide Schnipsel von Heisenbug funktionieren gut, wörtlich kopiert. – Jerdak

1

Ihre Codes hilft nicht sinnvoll ..

public Transform prefab; 
Object o = Instantiate(prefab); 

Sie implementieren eine Transformation? Warum versuchst du nicht, stattdessen das Fertigteil anzubringen?

sollten Sie versuchen:

public GameObject prefab; // attach the prefab in Unity Editor 
GameObject obj = Instantiate(prefab); 
GameObject.Destroy(obj); 
+2

Sein Code macht Sinn. Die [offiziellen Dokumente] (http://docs.unity3d.com/Documentation/ScriptReference/Object.Instantiate.html) verwenden sogar die gleiche 'public Transform Prefab'-Notation. – Jerdak

+0

'public Transform prefab;' ist in Ordnung, Sie könnten den Variablentyp als Transform oder GameObject deklarieren, abhängig von Ihrer Nachfrage. – Chchwy

+0

Interessant .. So können Sie eine Transformation instanziieren .. Danke .. – xuanweng

0

Ich bemerkte die akzeptierte Antwort tatsächlich falsch ist.

Wenn Sie die Instantiate-Funktion der Klasse verwenden, müssen wir den Typ von dem angeben, was wir instanziieren. Ich empfehle sehr zu lesen Instantiate API reference.


Um ein Fertig als GameObject

GameObject g = Instantiate(prefab) as GameObject; 

Um ein Fertig als Transform zu instanziiert und bieten eine Position im 3D-Raum zu instanziiert.

Transform t = Instantiate(prefab, new Vector3(1,10,11), new Quaternion(1,10,11,100)); 

Um eine Komponente, zu Zerstören, was bedeutet, Sie Skripte an Gameobjects sowie rigibodies und andere Komponenten zerstören können.

Destroy(g); 

oder

Destroy(t.gameObject)