2013-08-11 17 views
6

Potrzebuję utworzyć instancję i zniszczyć prefabrykat w biegu. Próbowałem:Wywoływanie i niszczenie 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 

Jak to zrobić?

+0

Trzeba studiować jakiś OO koncepcji. Chodzi o zmienną TYPE. – Chchwy

Odpowiedz

3

Nie musisz zadeklarować instancję jako przedmiot, jeśli nie masz przodkiem obiektu czarownica nie komponent Transformacja.

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

jeśli chcesz dostać przekształcić componant wpisz obj.transform jeśli chcesz Destry typ obiektu Destroy(obj);

nadzieję, że pomoże Peace

+0

nie można przekonwertować niejawnie ... więc dodałem (GameObject) tam i działało pomyślnie, ale muszę sprawdzić jeszcze kilka rzeczy do zweryfikowania, a następnie wdrożyć go –

3

daje transformacji i przekształcić składnik nie mogą być zniszczone

zniszczyć GameObject, do której element Transform jest przymocowany do:

GameObject.Destroy(o.gameObject); 

Instantiate sposób powraca tego samego typu przedmiotu przekazany jako parametr. Ponieważ jest to Transform, nie można go przesłać do GameObject. Spróbuj tego:

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

mówi, że nie można przesyłać ze źródła do miejsca docelowego –

+0

Która część? Oba fragmenty Heisenbuga działają dobrze, skopiowane dosłownie. – Jerdak

1

Twoje kody nie ma sensu ..

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

Tworzysz transformację? Dlaczego zamiast tego nie próbujesz dołączyć do prefabrykatów?

Należy spróbować:

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

Jego kod ma doskonały sens. [Oficjalne dokumenty] (http://docs.unity3d.com/Documentation/ScriptReference/Object.Instantiate.html) używają nawet tej samej notacji 'public Transform Prefab'. – Jerdak

+0

'public Transform prefab;' jest ok, możesz zadeklarować typ zmiennej jako Transform lub GameObject, w zależności od twojego zapotrzebowania. – Chchwy

+0

Interesujące .. Aby utworzyć instancję Transform .. Dzięki .. – xuanweng

0

zauważyłem akceptowane odpowiedź jest rzeczywiście źle.

Podczas korzystania z funkcji tworzenia instancji klasy MonoBehaviour musimy określić typ tworzonego wystąpienia. Gorąco polecam lekturę: Instantiate API reference.


do instancji prefabrykatów jako GameObject

GameObject g = Instantiate(prefab) as GameObject; 

do instancji prefabrykatów jako Transform i określenia pozycji w przestrzeni 3D.

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

zniszczyć składnik, który oznacza, że ​​można zniszczyć skryptów dołączonych do gameObjects jak również rigibodies i innych komponentów.

Destroy(g); 

lub

Destroy(t.gameObject)