当前位置: 首页 > news >正文

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();}
}

       好了,本次的分享到这里就结束啦,希望对你有所帮助~


http://www.mrgr.cn/news/39531.html

相关文章:

  • Linux之进程概念
  • 数据冒险与控制冒险
  • winform—将窗体显示在panel控件中
  • 多处理器的概念与对比
  • Maven(3)什么是POM?
  • Android15车载音频之CarAudioService加载解析各音区参数过程(八十七)
  • Redis缓存穿透雪崩击穿及解决
  • 如何使用 WSL 在 Windows 上安装 Linux
  • WingetUI:可视化Windows常用的命令行包管理工具
  • Vue3 + Vite 开发环境下解决跨域问题:配置代理服务器
  • postgreSql常用操作
  • 【拥抱AIGC】通义灵码网络代理配置
  • 《基于 Spring Boot 的健身房管理系统功能介绍》
  • 详细分析Java中的StopWatch基本知识(附Demo)
  • AI学习指南深度学习篇-批标准化的实现机制
  • Flume实战--Flume中的选择器、自动容灾(故障转移)、负载均衡的详解与操作
  • nginx的安装和使用
  • 1.8 软件业务测试
  • MySQL_触发器
  • 建筑物变化检测算法baseline工程,开箱即用,23年5月测试准确度超越阿里云aiearth