Unity通过递归查⼦节点物体和对应组件
递归查是我们在⽇常开发中很容易⽤到的⼀种查⽅法,通常我们在开发中都直接将其封装为⼀个查⼯具类,便于我们全局使⽤。接下来我就为⼤家详解⼀下递归查⼦节点物体和对应组件的⼯具类:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FindTools : MonoBehaviour
{
/// <summary>
param name/// transform类型递归查⼦物体
/// </summary>
/// <returns>返回需要查的⼦物体.</returns>
/// <param name="parent">查起点.</param>
/// <param name="targetName">需要查的⼦物体名字.</param>
public static Transform FindFunc(Transform parent,string targetName)
{
Transform target = parent.Find(targetName);
//如果到了直接返回
if (target != null)
return target;
//如果没有没有到,说明没有在该⼦层级,则先遍历该层级所有transform,然后通过递归继续查----再次调⽤该⽅法
for (int i = 0; i < parent.childCount; i++)
{
//通过再次调⽤该⽅法递归下⼀层级⼦物体
target = FindFunc(parent.GetChild(i), targetName);
if (target!=null)
return target;
}
return target;
}
/// <summary>
/// 泛型查
/// </summary>
/// <returns>返回需要查的⼦物体的类型.</returns>
/
// <param name="parent">查起点.</param>
/// <param name="targetName">需要查的⼦物体名字.</param>
/// <typeparam name="T">The 1st type parameter.</typeparam>
public static T FindFunc<T>(Transform parent,string targetName) where T:Component
{
Transform target = parent.Find(targetName);
if (target!=null)
{
return target.GetComponent<T>();
}
for (int i = 0; i < parent.childCount; i++)
{
target = FindFunc(parent.GetChild(i), targetName);
if (target!=null)
{
return target.GetComponent<T>();
}
}
return target.GetComponent<T>();
}
}
是不是很简单就搞定递归查。
(⼩科普:很多⼈认为递归就是⽆限循环的执⾏,虽然表⾯上是这样,但是递归和死循环的区别在于:递归是有结束循环条件的,⽽死循环没有)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论