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

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

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

  • 11
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值