实例化并摧毁Unity3D

本文关键字:Unity3D 摧毁 实例化 | 更新日期: 2023-09-27 18:27:10

我需要在运行中实例化并销毁预制件。我试过这些:

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

那么如何做到这一点呢?

实例化并摧毁Unity3D

如果您得到了没有转换组件的祖先对象,则不必将实例声明为Object。

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

如果要获取变换组件,只需键入obj.transform
如果要销毁对象,请键入Destroy(obj);

给出变换和变换分量不能被破坏的

销毁Transform组件所连接的GameObject

GameObject.Destroy(o.gameObject);

Instantiate方法返回作为参数传递的相同类型的对象。因为它是Transform,所以不能将它强制转换为GameObject。试试这个:

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

您的代码没有意义。。

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

你正在实例化一个Transform?你为什么不试着把预制的连接起来呢?

你应该试试:

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

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

当使用MonoBehavior类的实例化函数时,我们必须指定要实例化的对象的类型。我强烈建议阅读实例化API参考


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

GameObject g = Instantiate(prefab) as GameObject;

将预制件实例化为变换并在三维空间中提供位置。

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

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

Destroy(g);

Destroy(t.gameObject)