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 = ; 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 同时chils.setParent引起的bug的更多相关文章
- 项目中遇到的各种bug和踩过的坑
zepto 赋值时单位转换问题 zepto 的 animate 方法移动某个元素的位置时,例如修改某个绝对定位的元素的 left 值,要与修改前的值单位一致,修改前如果是像素值,修改后也要是像素值,否 ...
- NGUI UIGrid 动态刷新布局 && BUG FIX
/// <summary> /// "1" => 对应的一个UISpirte,"1234" => 对应四个预设 /// </sum ...
- unity transform 常用操作
1.寻找物体 1.1 寻找满足条件的子物体 ` public static Transform FindObj(Transform transform, Func<Transform, bool ...
- unity中遍历Transform的子物体
1.遍历Transform直接子transform private void Start() { var Equipment = building.transform.FindChild(" ...
- GameObject.Find与Transform.Find的区别
1.GameObject.Find 函数原型: public static GameObject Find(string name); 说明:1.GameObject只能查找到active的物体 2. ...
- Unity初级案例——贪吃蛇
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; ...
- NetworkManager网络通讯_NetworkLobbyManager(三)
此部分可以先建立游戏大厅,然后进入游戏,此处坑甚多耗费大量时间.国内百度出来的基本没靠谱的,一些专栏作家大V也不过是基本翻译了一下用户手册(坑啊),只能通过看youtube视频以及不停的翻阅用户手册解 ...
- Unity3D核心类型一览
Unity3D核心类型一览 本文记录了Unity3D的最基本的核心类型.包括Object.GameObject.Component.Transform.Behaviour.Renderer.Colli ...
- Unity3d项目入门之虚拟摇杆
Unity本身不提供摇杆的组件,开发者可以使用牛逼的EasyTouch插件或者应用NGUI实现相关的需求,下面本文通过Unity自身的UGUI属性,实现虚拟摇杆的功能. 主参考 <Unity:使 ...
随机推荐
- PHP实现螺旋矩阵(螺旋数组)
今天碰到一个比较有意思的问题, 就是把A到Y这25个字母以下面的形式输出出来 A B C D E P Q R S F O X Y T G N W V U H M L K J I 问题很有意思,就是转圈 ...
- [UWP]为什么ContentControl的ControlTemplate里放两个ContentPresenter会出问题(绕口)
1. 简单的HeaderedContentControl 上周五收到反馈,在一个ContentControl的ControlTemplate中放两个ContentPresenter会出错.出错的例子是 ...
- Perl的do语句块结构
do语句块结构如下: do {...} do语句块像是匿名子程序一样,没有名称,给定一个语句块,直接执行.且和子程序一样,do语句块的返回值都是最后一个执行的语句的返回值. 例如,将使用if-elsi ...
- 解读经典《C#高级编程》第七版 Page79-93.对象和类型.Chapter3
前言 本篇我们继续讲解本章其余的部分:构造函数.只读字段.匿名类型.结构详解.部分类.静态类.Object类.扩展方法,等. 01 类 构造函数 构造函数是一种特殊的方法: 与类同名 没有返回值,甚至 ...
- OJ:又一道考察多态的题目
Description 下面的程序输出结果是: A::Fun A::Do A::Fun C::Do 请填空: 程序代码如下 #include <iostream> using namesp ...
- 业务开发(二)—— Spring框架
0x01.使用枚举类,在MyBatis中 到了mapper.xml文件那里,如Status要与1进行对比,而不是1所对应的枚举字符串. 0x02.分页 Dao获取到的记录数,在Controller层放 ...
- C#比较两个对象是否为同一个对象。
两个对象是否为同一个对象:是看两个对象是否指向堆中的同一块内存. 1.使用object.ReferenceEquals() class Program { static void Main(strin ...
- Oracle时间与系统不同步,TimeStampService
要用到TimeStampService, Oracle数据库中select sysdate from dual获取数据库时间,发现比本地电脑慢几十秒, 不知这个实际中有没有影响 通过select db ...
- c# 图片带水纹波动
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- IIS (安装SSL证书后) 实现 HTTP 自动跳转到 HTTPS
IIS 里 安装好 SSL 证书后,如何实现 在浏览器里录入 http://www.xxx.com,会自动跳转到 https://www.xxx.com 呢. 首先,下载并安装 IIS 扩展: URL ...