Unity3d获取和正确删除所有子物体

参考文章:

Unity3d获取物体的所有子物体对象(child)

如何正确删除子物体



核心代码:

foreach (Transform childTr in transform)
{ 
  Debug.Log("childTr子物体名字:"+childTr.gameObject.name);
}

示例:

List lst = new List;
foreach (Transform child in transform)
{
    lst.Add(child); 
    Debug.Log(child.gameObject.name);
}
for(int i = 0;i < lst.Count;i++)
{
    Destroy(lst[i].gameObject);
}

示例中要注意的一点是,遍历foreach删除的方法只在运行时Destroy有延迟时有效,最好还是要将它储存到一个LIST里面,然后用for循环一个个去删。当然下面这样也行,每次都获取一下索引的子物体,删除即便延迟也没问题。
for (int i = tr.childCount - 1; i >= 0; i--) {
    Destroy(tr.GetChild(i).gameObject);
}

Destroy操作是延迟的,对象会活到帧的结尾,然后必定销毁。object destruction 是在所有的 update 执行之后的,所以在update之后才算真正销毁,update结束前还可以继续调用和响应委托等。 如果 自己删除子物体之后,再新建子物体,发现原来的子物体的函数依旧被调用了,就是这个问题,可以利用yield return new WaitForEndOfFrame();等待当前帧结束再做处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值