【Unity3D日常开发】如何获取所有的子对象(child)
发布日期:2021-06-30 11:40:06
浏览次数:2
分类:技术文章
本文共 2614 字,大约阅读时间需要 8 分钟。
推荐阅读
一、前言
这个问题还是比较简单的,无非就是一个for循环就可以全部获取到了,但是我喜欢简单直达,有没有直接就能获取到所有的子对象函数呢,搜了好久都没有,所以我准备写一个扩展函数,来自己补充这个函数,一起来看一下吧。
二、如何获取所有子对象
第一种方法:
使用foreach循环,找到transform下所有的子物体
foreach(Transform child in transform){ Debug.Log(child.gameObject.name);}
比如说,我有一个父物体:m_ParObj,我如何获取到所有的子对象呢:
using System.Collections;using System.Collections.Generic;using UnityEngine;public class SplitTest : MonoBehaviour{ public GameObject m_ParObj; private void Start() { Listm_Child = new List (); foreach (Transform child in m_ParObj.transform) { //Debug.Log(child.gameObject.name); m_Child.Add(child.gameObject); } }}
这样就将所有的子对象保存了下来。
第二种方法:
通过transform.GetChild(i)来获取到所有的子对象:
for (int i = 0; i < transform.childCount; i++){ Debug.Log(transform.GetChild(i).name);}
比如说,我有一个父物体:m_ParObj,我如何获取到所有的子对象呢:
using UnityEngine;public class SplitTest : MonoBehaviour{ public GameObject m_ParObj; private void Start() { GameObject[] m_Child = new GameObject[m_ParObj.transform.childCount]; for (int i = 0; i < m_Child.Length; i++) { m_Child[i] = m_ParObj.transform.GetChild(i).gameObject; } }}
这样就将所有的子对象保存了下来。
三、使用扩展方法获取所有子对象
总感觉获取个子对象还要用for循环有点麻烦,那么咱们就可以写一个扩展方法,直接获取到所有的子对象
1、首先新建一个MyExtensions.cs脚本
using System.Collections.Generic;using UnityEngine;public static class MyExtensions{ }
2、编写脚本
using System.Collections.Generic;using UnityEngine;public static class MyExtensions{ public static ListGetChild(this GameObject obj) { List tempArrayobj = new List (); foreach (Transform child in obj.transform) { tempArrayobj.Add(child.gameObject); } return tempArrayobj; } public static GameObject[] GetChildArray(this GameObject obj) { GameObject[] tempArrayobj = new GameObject[obj.transform.childCount]; for (int i = 0; i < obj.transform.childCount; i++) { tempArrayobj[i] = obj.transform.GetChild(i).gameObject; } return tempArrayobj; }}
这有两个函数,一个是获取所有子对象的List集合,一个是获取所有子对象的数组集合,按需使用。
扩展方法的使用可以参考我这篇文章:
3、使用扩展方法
使用m_ParObj.GetChild()就可以调用扩展方法:using System.Collections.Generic;using UnityEngine;public class SplitTest : MonoBehaviour{ public GameObject m_ParObj; private void Start() { Listm_Child = m_ParObj.GetChild(); for (int i = 0; i < m_Child.Count; i++) { Debug.Log(m_Child[i].gameObject.name); } }}
这样就可以通过一个函数就可以获取到所有的子对象了。
转载地址:https://itmonon.blog.csdn.net/article/details/110849582 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月09日 04时52分29秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
C语言指向函数的指针
2019-04-30
C语言词法分析中的贪心算法
2019-04-30
数据库 sql 优化
2019-04-30
经典SQL语句大全
2019-04-30
基于OpenSSL的HTTPS通信C++实现
2019-04-30
基于OpenSSL实现的安全连接
2019-04-30
Https协议详解
2019-04-30
C++WEBSOCKET客户端和服务端例子(BOOST.BEAST)
2019-04-30
查找排序算法(一)
2019-04-30
C++用BOOST解析命令行参数
2019-04-30
SECP256K1签名
2019-04-30
WINDOWS匿名管道
2019-04-30
非模式对话框的问题
2019-04-30
C++解析XML, TINYXML2的使用
2019-04-30
拷贝构造函数和移动构造函数解析
2019-04-30
COCOS2D-X主循环的委托模式的学习
2019-04-30
Python环境搭建
2019-04-30