实例化并摧毁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
那么如何做到这一点呢?
如果您得到了没有转换组件的祖先对象,则不必将实例声明为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)