博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
foreach Transform 同时chils.setParent引起的bug
阅读量:6992 次
发布时间:2019-06-27

本文共 1313 字,大约阅读时间需要 4 分钟。

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
GetChildren(this Transform tr){ List
children = new List
(); 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
;}

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

var childs = rideEffect.InstanceAsset.transform.GetChildren();foreach (var child in childs){    KTool.SetChild(child, boneTrans.transform);}

转载于:https://www.cnblogs.com/zhaoqingqing/p/6866344.html

你可能感兴趣的文章
Android系统进程Zygote启动过程的源代码分析(2)
查看>>
Powershell管理系列(三十七)PowerShell操作之比较两个CSV文件内容
查看>>
Oracle 变量绑定与变量窥视合集系列二
查看>>
“软件测试系列”学习路线图
查看>>
美国红帽软件公司是做什么的
查看>>
Powershell查询多个指定的收件人是否收到特定主题的邮件
查看>>
Memcached进程挂掉自动重启脚本
查看>>
论“软件测试实施”
查看>>
windows2012的NIC Teaming配置
查看>>
关于Saltstack halite 配置管理及二次开发ui [原salt-ui]
查看>>
针对敲诈病毒(WanaCrypt0r2.0)的应对方案
查看>>
网络地址转换--静态NAT(上)
查看>>
网管到底要学什么(三)
查看>>
Exchange中限制部分用户外网访问
查看>>
.NET简谈组件程序设计之(delegate与event关系)
查看>>
21.Azure备份Azure上的虚拟机(下)
查看>>
Ext JS 4.1 RC2 Released发布
查看>>
《兵临城下》:360输在“斯大林格勒”?
查看>>
如何从互联网获取Puppet的各项特殊资源
查看>>
Smack知识知多少
查看>>