我需要在运行中实例化并销毁预制件。我试过这些:
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
那怎么做?
答案 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)