您的位置:首页 > 移动开发 > Unity3D

unity, destroy gameObject & destroy all children

2016-03-06 02:44 615 查看
一,destroy gameObject

删除名为xxx的gameObject

错误方法1:

Destroy(xxx);

以上方法之所以错误,是因为Destroy在下一帧才生效,而在本帧之内xxx还存在,所以如果接下来的逻辑对xxx是否已经立即删除有依赖。很多时候会有依赖,比如在删除xxx之后又创建同名的xxx,并使用findChild获取并修改之,则此时将无法确定到底是修改了已删除的还是修改了新创建的,则会造成莫名奇妙的逻辑错误。又比如本帧内需要正确的childCount值,则上面方法也不行。

错误方法2:
xxx.transform.parent=null;

  Destroy(xxx);

问题在于 xxx.transform.parent=null这句相当于把xxx的父节点指定为unity Hierarchy的根节点。那么如果xxx本身就是挂在Hierarchy根节点上的话,则 "xxx.transform.parent=null; Destroy(xxx)"就等价于"Destroy(xxx)",由于Destroy(xxx)是错的,所以上面写法也是错的。

正确的方法:

  DestroyImmediate(xxx);

  

二,destroy all children

删除node的所有子节点

正确的方法:
List<GameObject> childList = new List<GameObject> ();
int childCount = node.transform.childCount;
for (int i=0; i<childCount; i++) {
GameObject child=node.transform.GetChild(i).gameObject;
childList.Add(child);
}
for (int i=0; i<childCount; i++) {
DestroyImmediate(childList[i]);
}
(node.transform.childCount == 0).MustBeTrue ();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: