zoukankan      html  css  js  c++  java
  • foreach Transform 同时chils.setParent引起的bug

    Transform继承自IEnumerable,可以对它进行迭代。但当你在迭代的同时,又对child进行setParent操作时,会出现意想不到的结果。

    下面是我使用foreach和getchild得到的bug,及解决办法。

    使用foreach

    当在使用foreach获取所有的child,并且同时修改child的parent为其它,会出现只能修改部分,但不会报错。

    foreach (var tran in rideEffect.InstanceAsset.transform)
    {
        var child = tran as Transform;
        if (child == null)
        {
            continue;
        }
        KTool.SetChild(child, boneTrans.transform);
    }

    使用GetChild

    使用getchild获取每一个child,同时设置child的parent为其它时,会报:Transform child out of bounds

    var childCount = rideEffect.InstanceAsset.transform.childCount;
    for (int idx = 0; idx < childCount; idx++)
    {
        var child = rideEffect.InstanceAsset.transform.GetChild(idx);
        KTool.SetChild(child, boneTrans.transform);
    }

    解决办法

    添加一个扩展方法获取所有的childs,存起来。

    或者也可以不写扩展方法,直接使用List<Transform>存child。

    public static IEnumerable<Transform> GetChildren(this Transform tr)
    {
        List<Transform> children = new List<Transform>();
        foreach (Transform child in tr)
        {
            children.Add(child);
        }
        // You can make the return type an array or a list or else.
        return children as IEnumerable<Transform>;
    }

    调用方法,这样就可以修改完全部的child

    var childs = rideEffect.InstanceAsset.transform.GetChildren();
    foreach (var child in childs)
    {
        KTool.SetChild(child, boneTrans.transform);
    }
  • 相关阅读:
    树莓派/Debian 搭建 FTP 服务器
    树莓派/Debian “无法定位软件包 mod_ssl” 问题解决方案
    树莓派/Debian HTTP 到 HTTPS 端口重定向
    树莓派/Debian 搭建ownCloud私有云网盘
    树莓派/Debian 构建 LAMP Web 服务器并搭建 WordPress 博客(二)
    改进一维搜索
    实现共轭梯度法蒙皮模拟
    基本实现蒙皮模拟
    实现权重计算
    把状态保存
  • 原文地址:https://www.cnblogs.com/zhaoqingqing/p/6866344.html
Copyright © 2011-2022 走看看