6

我需要在运行时实例化和销毁一个预制件。我试过这些:

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

4 回答 4

3

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

销毁组件附加到的GameObjectTransform

GameObject.Destroy(o.gameObject);

Instantiate方法返回作为参数传递的对象的相同类型。由于它是 aTransform你不能将它转换为GameObject. 尝试这个:

GameObject o=((Transform)Instantiate(prefab)).gameObject;
于 2013-08-11T23:02:37.197 回答
3

您不必将您的实例声明为对象,如果您这样做,您将获得它没有转换组件的祖先对象。

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

如果您想获取转换组件,只需键入obj.transform.
如果要销毁对象类型Destroy(obj);

于 2013-08-12T01:15:31.717 回答
1

你的代码没有意义..

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

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

你应该试试:

public GameObject prefab; // attach the prefab in Unity Editor
GameObject obj = Instantiate(prefab);
GameObject.Destroy(obj);
于 2013-08-12T04:13:07.260 回答
1

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

当使用MonoBehaviour类的 Instantiate 函数时,我们必须指定我们正在实例化的类型。我强烈推荐阅读Instantiate API 参考


将预制件实例化为游戏对象

GameObject g = Instantiate(prefab) as GameObject;

将预制件实例化为变换并提供 3D 空间中的位置。

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

销毁组件,这意味着您可以销毁附加到游戏对象以及刚体和其他组件的脚本。

Destroy(g);

或者

Destroy(t.gameObject)

于 2013-11-26T15:00:24.200 回答