2013-08-11 3 views
6

Мне нужно создать экземпляр и уничтожить сборник на ходу. Я пробовал:Instantiate and 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 

Итак, как это сделать?

+0

Вы должны изучить некоторые OO концепции. Все дело в переменном TYPE. – Chchwy

ответ

3

Вы не должны объявить экземпляр как объект, если вы делаете вы получите объект ведьму предка он не компонент Transforma.

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

если вы хотите получить преобразование componant просто введите obj.transform если вы хотите Дестри тип объекта Destroy(obj);

Надежда, что помогает мир

+0

не может преобразовать неявно ... поэтому я добавил (GameObject) там, и он успешно сработал, но мне нужно проверить еще несколько вещей, чтобы проверить, а затем реализовать его. –

3

дает преобразование и преобразование компонент не может быть разрушен

уничтожить GameObject, к которому Transform компонент присоединен к:

GameObject.Destroy(o.gameObject); 

Instantiate метод возвращает тот же тип объекта, переданного в качестве параметр. Так как это Transform, вы не можете наложить его на GameObject. Попробуйте это:

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

Он говорит, что не может отбрасывать из источника в пункт назначения –

+0

Какая часть? Оба фрагмента Heisenbug работают отлично, скопированы дословно. – Jerdak

1

Ваши коды не имеет смысла ..

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

Вы создаете Преобразование? Почему вы не пытаетесь добавить сборку?

Вы должны попробовать:

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

Его код имеет смысл. В [официальных документах] (http://docs.unity3d.com/Documentation/ScriptReference/Object.Instantiate.html) даже используется одна и та же «public Transform Prefab» нотация. – Jerdak

+0

'public Transform prefab;' в порядке, вы можете объявить тип переменной как Transform или GameObject, в зависимости от вашего требования. – Chchwy

+0

Интересно .. Так что вы можете создать экземпляр Transform .. Спасибо .. – xuanweng

0

Я заметил, принятый ответ на самом деле не так.

При использовании функции Instantiate для класса мы должны указать тип того, что мы создаем. Я настоятельно рекомендую прочитать Instantiate API reference.


для создания экземпляра сборного как GameObject

GameObject g = Instantiate(prefab) as GameObject; 

для создания экземпляра сборного как Transform и обеспечить положение в 3D-пространстве.

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

уничтожить компонент, который означает, что вы можете уничтожить скрипты, прикрепленные к геймобжектам, а также rigibodies и другим компонентам.

Destroy(g); 

или

Destroy(t.gameObject) 

Смежные вопросы