当前位置: 代码迷 >> 综合 >> Unity3D 如何干净的解除父子关系
  详细解决方案

Unity3D 如何干净的解除父子关系

热度:71   发布时间:2023-09-21 22:33:17.0

之前我一直用的都是下面这种方法

//清除原来的按钮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了。