目录
本篇文章来分享一下Transform工具类,可以让有关Transform的查找和销毁操作更加便捷。
Transform工具类
1.查找子物体
通过递归进行查找
/// <summary>
/// 查找子物体(递归)
/// </summary>
/// <param name = "parent" > 父物体 </ param >
/// < param name="childName">子物体名称</param>
/// <returns></returns>
public static Transform FindChildByName(this Transform parent, string childName)
{
Transform child = parent.Find(childName);
if (child != null) { return child; }
int count = parent.childCount;
for (int i = 0; i < count; i++)
{
child = FindChildByName(parent.GetChild(i), childName);
if (child != null) { return child; }
}
return null;
}
2.根据名字查找所有的子物体
也通过递归进行查找,FindChildrenByName查找父物体的第一个子物体下的所有指定名称的子物体
/// <summary>
/// 根据名字查找所有子物体
/// </summary>
/// <param name = "parent" > 父物体 </ param >
/// < param name="childName">子物体名称</param>
/// <returns></returns>
public static Transform[] FindChildrenByName(this Transform parent, string childName)
{
List<Transform> children = new List<Transform>();
Transform child = parent.Find(childName);
if (child != null) { children.Add(child); }
int count = parent.childCount;
for (int i = 0; i < count; i++)
{
FindChildrenByNameInner(parent.GetChild(i), childName, children);
}
return children.ToArray();
}
public static void FindChildrenByNameInner(Transform parent, string childName, List<Transform> children)
{
Transform child = parent.Find(childName);
if (child != null) { children.Add(child); }
int count = parent.childCount;
for (int i = 0; i < count; i++)
{
FindChildrenByNameInner(parent.GetChild(i), childName, children);
}
}
3.销毁父物体下的所有子物体
/// <summary>
/// 销毁父物体下所有子物体
/// </summary>
/// <param name = "transform" > 父物体 </ param >
public static void DestroyChildren(this Transform transform)
{
for (int i = transform.childCount - 1; i >= 0; i--)
{
GameObject o = transform.GetChild(i).gameObject;
Object.Destroy(o);
}
}
完整代码
using UnityEngine;
using System.Collections.Generic;
public static class TransformHelper
{
/// <summary>
/// 查找子物体(递归)
/// </summary>
/// <param name = "parent" > 父物体 </ param >
/// < param name="childName">子物体名称</param>
/// <returns></returns>
public static Transform FindChildByName(this Transform parent, string childName)
{
Transform child = parent.Find(childName);
if (child != null) { return child; }
int count = parent.childCount;
for (int i = 0; i < count; i++)
{
child = FindChildByName(parent.GetChild(i), childName);
if (child != null) { return child; }
}
return null;
}
/// <summary>
/// 根据名字查找所有子物体
/// </summary>
/// <param name = "parent" > 父物体 </ param >
/// < param name="childName">子物体名称</param>
/// <returns></returns>
public static Transform[] FindChildrenByName(this Transform parent, string childName)
{
List<Transform> children = new List<Transform>();
Transform child = parent.Find(childName);
if (child != null) { children.Add(child); }
int count = parent.childCount;
for (int i = 0; i < count; i++)
{
FindChildrenByNameInner(parent.GetChild(i), childName, children);
}
return children.ToArray();
}
public static void FindChildrenByNameInner(Transform parent, string childName, List<Transform> children)
{
Transform child = parent.Find(childName);
if (child != null) { children.Add(child); }
int count = parent.childCount;
for (int i = 0; i < count; i++)
{
FindChildrenByNameInner(parent.GetChild(i), childName, children);
}
}
/// <summary>
/// 销毁父物体下所有子物体
/// </summary>
/// <param name = "transform" > 父物体 </ param >
public static void DestroyChildren(this Transform transform)
{
for (int i = transform.childCount - 1; i >= 0; i--)
{
GameObject o = transform.GetChild(i).gameObject;
Object.Destroy(o);
}
}
}
测试
using UnityEngine;
public class TransformHelperTest : MonoBehaviour
{
public Transform testGo;
private void Start()
{
//查找子物体
Transform go1 = testGo.FindChildByName("Go1");
//根据名字查找所有子物体
Transform[] children = testGo.FindChildrenByName("Go");
//销毁父物体下所有子物体
testGo.DestroyChildren();
}
}
好了,本次的分享到这里就结束啦,希望对你有所帮助~