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,如需转载请自行联系原作者
相关文章
Failed to execute ‘setAttribute‘ on ‘Element‘: ‘;min-height:‘ is not a valid attribute name.添加100vh
Failed to execute ‘setAttribute‘ on ‘Element‘: ‘;min-height:‘ is not a valid attribute name.添加100vh
|
2月前
|
索引 Python
pd.concat([pre_salers,new_salers],keys=['pre','new'],axis=0)啥意思
pd.concat([pre_salers,new_salers],keys=['pre','new'],axis=0)啥意思
|
2月前
|
索引 Python
pd.concat([pre_salers,new_salers],keys=['pre','new'],axis=0)啥意思
pd.concat([pre_salers,new_salers],keys=['pre','new'],axis=0)啥意思
|
3月前
|
Android开发
解决RenderUiKitView object was given an infinite size during layout.
解决RenderUiKitView object was given an infinite size during layout.
34 3
|
5月前
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的报错解决
|
Python
Python报错ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Python报错ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
1523 1
|
JSON 数据格式 索引
Elastic:doc[‘field‘].value与params._source[‘field‘]的区别;doc循环依赖问题
今天有同学问到doc['field'].value与params._source['field']用法的区别,起因在于下述的一道题的解法上,下面详细讲述下我的看法
199 0
Elastic:doc[‘field‘].value与params._source[‘field‘]的区别;doc循环依赖问题
|
Android开发 数据格式 JSON
android报错 Expected BEGIN_OBJECT but was STRING at line 1 column 39 path $
      我在使用retrofit和Gson配合时,出现了这个问题,疑惑中乱七八糟瞎搞了一个下午没有解决。期间怀疑Gson解析不能使用泛型(因为我的解析使用了泛型),后来又觉得可能是我的关键字正好是解析器的某个关键字导致的异常,也打算过自定义Gson的解析过程,其实这些都不是。         第二天才搞明白,真正的问题是我的数据结构有问题,或者说我的解析出现了问题。  
4330 0
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
850 0