首页 > 代码库 > foreach Transform 并setParent引起的bug
foreach Transform 并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);}
foreach Transform 并setParent引起的bug
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。