C# 实例化并销毁Unity3D

C# 实例化并销毁Unity3D,c#,unity3d,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);

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

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
那怎么做呢

提供转换,并且无法销毁转换组件

销毁
Transform
组件所连接的
GameObject

GameObject.Destroy(o.gameObject);
Instantiate
方法返回作为参数传递的相同类型的对象。因为它是一个
变换
,所以你不能将它投射到
游戏对象
。试试这个:

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

您不必将实例声明为对象,如果您得到的是祖先对象,而不是转换组件

public GameObject prefab;
GameObject obj = Instantiate(prefab); 
如果您想获得转换组件,只需键入
obj.transform


如果要销毁对象类型
destroy(obj)

您的代码没有意义

public Transform prefab;
Object o = Instantiate(prefab);
您正在实例化一个转换?你为什么不试着装上预制件呢

你应该试试:

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

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

当使用类的实例化函数时,我们必须指定实例化的类型。我强烈推荐阅读


将预置实例化为

GameObject g = Instantiate(prefab) as GameObject;
将预制件实例化为,并在三维空间中提供位置

Transform t = Instantiate(prefab, new Vector3(1,10,11), new Quaternion(1,10,11,100));
销毁组件,这意味着您可以销毁附加到游戏对象以及rigibodies和其他组件的脚本

Destroy(g);



他的代码非常合理。甚至使用相同的
公共转换预制
表示法。
公共转换预制没问题,你可以声明变量类型为Transform或GameObject,这取决于你的需求。这困扰了我多年,似乎终于有意义了。如果是组件,“将复制父对象”。基本上,如果您只想关注变换,请复制它。终于有道理了。我建议你查一下为脚本分配游戏对象,unity answers对此有一个很好的解释。它说不能从源代码到目的代码转换哪个部分?Heisenbug的两个代码片段都很好,是逐字复制的。无法隐式转换…所以我在那里添加了(GameObject),它成功运行了,但我需要检查更多的东西来验证,然后实现它。你需要研究一些OO概念。这都是关于变量类型的。
Destroy(t.gameObject)