之前我一直用的都是下面这种方法
//清除原来的按钮
if (this.transform.childCount > 0)
{
for(int j=0;j<this.transform.childCount;j++)
{
Destroy(this.transform.GetChild(j));
}
}
以前做没发现问题,现在的功能是先删除子物体,然后再重新添加,当我去获取子物体的个数的时候,发现数值比添加的要多一些。上网查了才发现,原来删除子物体,并不会立马改变childCount的数量,所以会childCount会加上原来的,就不是我们想要获取的数值。
还有一种解除父子关系的方法是
this.transform.DetachChildren();
但是该方法不会删除子游戏物体,只是解除了父子关系,所有的子物体将直接成为场景内的物体存在。
用了这种方法,我们想再去删除场景中的这个被解除的子物体就没办法找到。
所以我就想到了先解除父子关系,然后再删除这个子物体。
if (this.transform.childCount > 0)
{
for(int j=0;j< this.transform.childCount;)
{
GameObject go= this.transform.GetChild(j).gameObject;
go.transform.SetParent(null);
Destroy(go);
}
}
这里要注意,先移除了子物体,所以父物体的数量在递减,就不需要j--了,我们只需要一直删除第一个就可以删除完了。
这时候再获取父物体的childCount就是0了。