C#自定义工具类-Transform工具类
目录
Transform工具类
1.查找子物体
2.根据名字查找所有的子物体
3.销毁父物体下的所有子物体
完整代码
测试
本篇文章来分享一下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();}
}
好了,本次的分享到这里就结束啦,希望对你有所帮助~