- 最后登录
- 2021-7-6
- 注册时间
- 2012-12-27
- 阅读权限
- 90
- 积分
- 76145
- 纳金币
- 53488
- 精华
- 316
|
来自:夏之末
如何获取子物体孙物体重孙物体子孙后代所有的某个组件呢?我的第一直觉是用递归,毕竟这玩意是个树状的嘛!但是话说回来我的递归有返回值的话我可能遍历到某个分支的尽头就返回了,所以我想了个办法,递归的方法让他没有返回值,给这个方法一个重载让它来返回,这样就解决了这个问题。emmm如果你听不懂的话直接看代码会好一些。- /// <summary>
- /// 遍历所有子孙后代的组件
- /// </summary>
- /// <typeparam name="T">你要返回的类型</typeparam>
- /// <param name="parent">父物体</param>
- /// <param name="list">你返回的列表</param>
- /// <returns></returns>
- public static List<T> FindChildAll<T>(Transform parent, List<T> list) where T : Object
- {
- if (parent.childCount > 0)
- {
- for (int i = 0; i < parent.childCount; i++)
- {
- T t = parent.GetChild(i).GetComponent<T>();
- if (t != null)
- {
- list.Add(t);
- }
- FindChildAll(parent.GetChild(i), list, i);
- }
- }
- return list;
- }
- /// <summary>
- /// 遍历所有子孙后代的组件
- /// </summary>
- /// <typeparam name="T">你要返回的类型</typeparam>
- /// <param name="parent">父物体</param>
- /// <param name="list">你返回的列表</param>
- /// <param name="depth">深度(用来重载)</param>
- public static void FindChildAll<T>(Transform parent, List<T> list, int depth) where T : Object
- {
- if (parent.childCount > 0)
- {
- for (int i = 0; i < parent.childCount; i++)
- {
- list.Add(parent.GetChild(i).GetComponent<T>());
- FindChildAll(parent.GetChild(i), list, i);
- }
- }
- }
复制代码 |
|