• unity, destroy gameObject & destroy all children


    一,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 ();

  • 相关阅读:
    block和delegate的区别
    iOS真机测试友盟碰到错误linker command failed with exit code 1 (use -v to see invocation) 百度地图的检索失败 sqlite 错误码
    iOS国际化多语言设置
    获取本机ip地址
    iOS-Senior19-FMDB第三方应用
    iOS-Senior17-CoreAnimation动画
    iOS-Senior18-CocoPods的安装步骤
    iOS-Senior17-UIView动画
    iOS-Senior17-菊花风火轮(代码)
    iOS-Senior17-Gif动画图片(代码)
  • 原文地址:https://www.cnblogs.com/wantnon/p/5246470.html
Copyright © 2020-2023  润新知