实例化并销毁Unity3D

时间:2013-08-11 20:54:44

标签: c# 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

那怎么做?

4 个答案:

答案 0 :(得分:3)

  

给出变换和变换组件不能被破坏

销毁GameObject组件所附加的Transform

GameObject.Destroy(o.gameObject);

Instantiate方法返回与参数传递的对象相同的类型。由于它是Transform,因此您无法将其投射到GameObject。试试这个:

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

答案 1 :(得分:3)

如果你得到的是没有变换组件的祖先对象,你不必将你的Instance声明为Object。

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

如果你想获得变换组件,只需输入obj.transform 如果要销毁对象类型Destroy(obj);

答案 2 :(得分:1)

你的代码没有意义..

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

您正在实例化变换?为什么不尝试附加预制件呢?

你应该尝试:

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

答案 3 :(得分:0)

我注意到接受的答案实际上是错误的。

当使用 MonoBehaviour 类的实例化函数时,我们必须指定我们实例化的类型。我强烈建议您阅读 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));

要销毁组件,这意味着您可以销毁附加到gameObjects以及rigibodies和其他组件的脚本。

Destroy(g);

Destroy(t.gameObject)