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);
}



本文出自赵青青,原文链接:http://www.cnblogs.com/zhaoqingqing/p/6866344.html,如需转载请自行联系原作者
相关文章
|
5月前
|
Java
让星星⭐月亮告诉你,Java NIO之Buffer详解 属性capacity/position/limit/mark 方法put(X)/get()/flip()/compact()/clear()
这段代码演示了Java NIO中`ByteBuffer`的基本操作,包括分配、写入、翻转、读取、压缩和清空缓冲区。通过示例展示了`position`、`limit`和`mark`属性的变化过程,帮助理解缓冲区的工作原理。
68 2
|
9月前
Each child in a list should have a unique “key“ prop. Check the render method的报错解决
Each child in a list should have a unique “key“ prop. Check the render method的报错解决
|
Android开发 数据格式 JSON
android报错 Expected BEGIN_OBJECT but was STRING at line 1 column 39 path $
      我在使用retrofit和Gson配合时,出现了这个问题,疑惑中乱七八糟瞎搞了一个下午没有解决。期间怀疑Gson解析不能使用泛型(因为我的解析使用了泛型),后来又觉得可能是我的关键字正好是解析器的某个关键字导致的异常,也打算过自定义Gson的解析过程,其实这些都不是。         第二天才搞明白,真正的问题是我的数据结构有问题,或者说我的解析出现了问题。  
4400 0
|
容器
Fragment的replace、add、hide、show的使用和详解
Fragment的replace、add、hide、show的使用和详解
IDEA 解决Number objects are compared using '==', not 'equals()' 警告
IDEA 解决Number objects are compared using '==', not 'equals()' 警告
vuepress build提示YAMLException: end of the stream or a document separator is expected at line 7, colu
vuepress build提示YAMLException: end of the stream or a document separator is expected at line 7, colu
895 0