销毁物体
三种方式,各有不同
使用SetActive
中文文档
使用 gameObject.SetActive(bool);设置物体的显示或者隐藏来大小销毁的效果,但它还是存在的,在Hierarchy中还是可以找到他的。
作用就像是点击Inspector中的物体名称前面的对勾。
//使用方式
gameObject.SetActive(true);//显示
gameObject.SetActive(false);//隐藏
他会再次执行Enable方法,不会执行Awake和Start方法。
使用Destroy()
中文文档
正经销毁物体在Hierarchy面板中找不到对应的gameobject了。
使用这种方式会在再次产生这个gameObject的时候运行Awake方法和Start方法。
使用方式
Destroy(gameObject);//销毁有一个物体
Destroy(gameObject.GetComponent<InputField>());//不销毁物体但是会删除gameObject上的InputField的组件
Destroy(gameObject,0.5f);//单位是秒,在0.5秒之后销毁gameObject
在内存中没有消失
使用DestroyImmediate()
中文文档
立即销毁gameObject,在内存中也会消失。
使用这种方式会在再次产生这个gameObject的时候运行Awake方法和Start方法。
//使用方式
DestroyImmediate(gameObject);//销毁gameObject,在内存中也会消失
官方不建议使用这个的东西
销毁某个父物体下的子物体
主要是DestroyImmediate(gameObject);和Destroy(gameObject);的区别。
方式_1
使用DestroyImmediate(gameObject);
for (int i = 0; i < father.childCount; i++)
{
DestroyImmediate(father.GetChild(0));
}
方式_2
使用Destroy(gameObject);
for (int i = 0; i < father.childCount; i++)
{
Destroy(father.GetChild(i));
}
主要区别是在for中的的 Destroy(Factory.GetChild(0));的Factory.GetChild(0)参数的不同。