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

论坛 期权论坛 脚本     
匿名网站用户   2020-12-21 03:19   15   0

参考文章:

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();等待当前帧结束再做处理。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP