参考文章:
核心代码:
foreach (Transform childTr in transform)
{
}
示例:
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();等待当前帧结束再做处理。