Unity 关于GetComponentsInChildren 利用扩展方法如何避免获取父物体

1:相信大家都有用到GetComponentsInChildren这个方法吧?但是再用这个方法的时候,

       如果GetComponentsInChildre<T>(),

    如果父对象和子对象都存在相同的T,那么这个得到的数组也会包含父对象中的T,这个在很多情况下我们是不要的,

    那么如何解决这个问题呢?


2:解决方法

相信大家要写肯定都会啦,这里我是写了扩展方法(具体C#扩展方法,找度娘啦)

1:首先创建一个MyExtension类,不继承mono(注意static),然后写了一个方法

然后使用

就可以了,不过GetComponentsInChildren有个重载方法,我在这里小提一下
        public T[] GetComponentsInChildren<T>(bool includeInactive);
    这个重载,默认是false,includeInactive=true,那么在获取子对象的时候如果T对象是关闭的仍然可以得到,
如果includeInactive=false, 那么就不会获得关闭的T对象    

 

      

为true的时候

下面我们修改一下自己写的扩展方法(其实没啥修改QAQ)

然后也像原来那么用就行了哈

ok了!!!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Unity中,可以使用以下两种方法获取一个物体的所有子物体方法一:使用Transform.GetChild()方法 使用Transform.GetChild()方法可以获取一个Transform组件的子物体。可以使用该方法循环遍历每个子物体并执行所需操作。以下是示例代码: ```csharp // 获取物体的Transform组件 Transform parentTransform = transform; // 循环遍历每个子物体并执行所需操作 for (int i = 0; i < parentTransform.childCount; i++) { Transform childTransform = parentTransform.GetChild(i); // 在这里执行你想要执行的操作 } ``` 方法二:使用GameObject.GetComponentsInChildren()方法 使用GameObject.GetComponentsInChildren()方法可以获取一个GameObject及其所有子物体的组件。该方法返回一个包含所有组件的数组。可以使用该方法获取所有子物体的Transform组件或其他组件。以下是示例代码: ```csharp // 获取物体及其所有子物体的Transform组件 Transform[] childTransforms = gameObject.GetComponentsInChildren<Transform>(); // 循环遍历每个子物体并执行所需操作 foreach (Transform childTransform in childTransforms) { // 在这里执行你想要执行的操作 } ``` 需要注意的是,使用GameObject.GetComponentsInChildren()方法会返回所有子物体的组件,包括物体自身的组件。如果只需要获取物体的组件,可以将includeInactive参数设置为false。例如,如果只需要获取所有激活的子物体的Transform组件,可以使用以下代码: ```csharp // 获取物体及其所有激活的子物体的Transform组件 Transform[] activeChildTransforms = gameObject.GetComponentsInChildren<Transform>(false); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值