unity深度查找某个子物体和遍历所有子物体方法_unity 获取同级物体-程序员宅基地

技术标签: Unity常用函数方法  unity3d  

本文总结一下关于unity的查找子物体的方法

首先说明一下这里将讲三种查找子物体方法:

查找固定路径的某一个子物体的方法、通过名字深度查找某个子物体的方法、查找父物体下所有子物体的方法。

第一:查找固定路径的某一个子物体的方法

对于已知的路径可以直接用go.transform.FindChild方法来查找。

例如:在这样一个层级路径下,我们要找到最后那个plane物体。

复制代码
 1 using UnityEngine;
 2 using System.Collections;
 3  
 4 public class findchild : MonoBehaviour {
    
 5  
 6     // Use this for initialization
 7     void Start () {
    
 8     
 9     }
10     
11     // Update is called once per frame
12     void Update () {
    
13         if (Input.GetMouseButtonDown(1))
14         {
    
15             //查找物体方法
16             GameObject go = GameObject.Find("Cube");
17             //查找子物体,并且将得到的物体转换成gameobject
18           GameObject objname= go.transform.FindChild("Sphere/Cylinder/Plane").gameObject;
19  
20           Debug.Log("得到最终子物体的名字是:"+ objname.name);
21         }
22     }
23 }
复制代码

然后是执行结果:Plane
在这里插入图片描述

==-------------------------------------------------------------------------------------------------------------

第二:通过名字深度查找某个子物体的方法

注意:要使用这个方法必须要满足两个条件:第一必须有你要查找的子物体的名字,第二必须要从一个父物体上开始查起

下面代码中,check代表从这个父物体开始查起,name为你要查找的目标子物体的名称。如return GetTransform(transform,“bone12”);

该方法核心代码:

复制代码
 1 using UnityEngine;
 2 using System.Collections;
 3  
 4 public class findchild : MonoBehaviour {
    
 5  
 6     // Use this for initialization
 7     void Start () {
    
 8     
 9     }
10     
11     // Update is called once per frame
12     void Update () {
    
13         if (Input.GetMouseButtonDown(1))
14         {
    
15             //  //查找物体方法
16            GameObject go = GameObject.Find("Cube");
17             //  //查找子物体,并且将得到的物体转换成gameobject
18             //GameObject objname= go.transform.FindChild("Sphere/Cylinder/Plane").gameObject;
19  
20             //Debug.Log("得到最终子物体的名字是:"+ objname.name);
21              
22  
23             GetTransform(go.transform, "Cylinder");
24             
25         }
26     }
27  
28     Transform GetTransform(Transform check, string name)
29     {
    
30         Transform forreturn = null;
31  
32         foreach (Transform t in check.GetComponentsInChildren<Transform>())
33         {
    
34             if (t.name == name)
35             {
    
36                 Debug.Log("得到最终子物体的名字是:" + t.name);
37                 forreturn = t;
38                 return t;
39                 
40             }        
41            
42         }
43         return forreturn;
44     }
45 }
复制代码

测试结果:Cylinder
在这里插入图片描述


第三:接下来我们将获取一个父物体下的所有子物体,然后销毁其下所有子物体

注意:所有子物体都是同级关系,在同一层里。如图:
在这里插入图片描述

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class findchild : MonoBehaviour {
    

    // Use this for initialization
    void Start () {
    

    }

    // Update is called once per frame
    void Update () {
    
        if (Input.GetMouseButtonDown(1))
        {
    
            //  //查找物体方法
           GameObject go = GameObject.Find("Cube");
            List<Transform> lst = new List<Transform>();
            foreach (Transform child in go.transform)
            {
    
                lst.Add(child);
                Debug.Log(child.gameObject.name);
            }
            for (int i = 0; i < lst.Count; i++)
            {
    
                Debug.Log("销毁的物体是:"+ lst[i].gameObject);
                Destroy(lst[i].gameObject);
            }

        }
    }


}

测试结果,全被销毁了:

在这里插入图片描述

以上就是我总结的常用的三种查找子物体的方法。

转自https://www.cnblogs.com/macky/p/9335093.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_45570756/article/details/114797897

智能推荐

计算机毕业设计ssm智能旅游线路规划系统设计与实现9xwhi9(附源码)新手必备_规划算法毕业设计-程序员宅基地

文章浏览阅读675次。选题背景:随着人们生活水平的提高和旅游需求的增加,旅游业蓬勃发展。然而,传统的旅游线路规划方式存在一些问题,如信息不全面、规划不科学等。因此,设计与实现一个智能旅游线路规划系统具有重要意义。该系统旨在利用人工智能技术,通过对用户的个性化需求和旅游资源的分析,自动生成最优的旅游线路规划方案,为旅游者提供便捷、高效的旅行体验。意义:智能旅游线路规划系统的设计与实现具有重要的意义。首先,该系统可以提供个性化的旅游线路规划服务。传统的旅游线路规划方式往往只能提供一些常规的旅游线路,无法满足旅游者个性化的_规划算法毕业设计

[面试题][数学与概率]设计随机数生成器_随机数生成器 面试题-程序员宅基地

文章浏览阅读2.9k次,点赞4次,收藏5次。假设你已经有一个随机数生成器,能够以概率p生成0,概率1-p生成1,请问如何设计算法以概率q等概率地生成0-6这七个数字中的一个?即每个数字的概率均为q,q&lt;1/7.我们先从简单的情况开始考虑,假设需要生成0和1,二者概率均为q。那么我们可以让已有的随机数生成器产生两个数字,那么产生的数字及概率是: Number Prob 00 p2p2p^2..._随机数生成器 面试题

最详尽的4K技术科普_x5200w 升级固件-程序员宅基地

文章浏览阅读5.7k次。什么是4K?4K是一个分辨率的范畴,即4096×2160的像素分辨率,一般用于专业设备居多,目前家庭用的设备,如4K电视、4K显示器、4K投影仪甚至是4K蓝光碟等分辨率则为3840x2160。2K分辨率则是2048x1080的像素分辨率,高清电视机、高清显示器、投影仪以及蓝光的分辨率基本上都是1920x1080的像素分辨率。高清 1080p 能够显示的有效像素为2,073,600(19..._x5200w 升级固件

小程序Git版本管理_gittoolbox关闭自动pull-程序员宅基地

文章浏览阅读2.1k次。一.新项目上传Gita.新建git仓库,复制git仓库地址,创建git仓库的时候最好别使用Readme,否则会很纠结b.点击小程序工具栏的版本管理,初始化git,双勾选直接确定c.配置git仓库地址及仓库认证名称自己取,地址为git仓库地址配置git仓库的账号密码d.拉取远程仓库e.上传代码到远程仓库,master为分支名,上传完毕二.拉Git上的小程序项目a.复制要..._gittoolbox关闭自动pull

理解Golang中defer的使用_golang defer-程序员宅基地

文章浏览阅读2.5w次,点赞24次,收藏59次。之前一直对Go中的defer不太理解,所以我单独弄出来整理一下。在golang当中,defer代码块会在函数调用链表中增加一个函数调用。这个函数调用不是普通的函数调用,而是会在函数正常返回,也就是return之后添加一个函数调用。因此,defer通常用来释放函数内部变量。通过defer,我们可以在代码中优雅的关闭/清理代码中所使用的变量。defer作为golang清理变量的特性,有其独有且明确..._golang defer

MySQL性能优化实践:SQL查询优化之使用只读索引、IN方法和临时表分批查询(附加:索引的创建删除命令)_分批查询mysql-程序员宅基地

文章浏览阅读275次。在处理大量数据时,MySQL的性能可能面临瓶颈。为了提升查询效率,本文将介绍三种优化SQL查询的方法:只读索引、IN方法和临时表分批查询。通过Java示例代码和讲解,帮助读者理解并应用这些优化技巧,提升MySQL查询性能。通过本文介绍的只读索引、IN方法和临时表分批查询这三种优化方法,你可以提升MySQL的查询性能。根据实际需求和场景,选择合适的优化方法,可以获得更好的查询体验。_分批查询mysql

随便推点

篇章结构类型、层次及分析模式研究-程序员宅基地

文章浏览阅读1w次,点赞4次,收藏6次。这篇是何继红、张德禄一篇发表在《外语与外语教学》上的一篇论文,本文是其个人读后感和一些想法。1. 摘要这篇文章中,主要针对的是语篇结构和类型、层级性和分析模式的研究,着重对于语篇的结构类型进行了相关的探讨。我也主要是注重其语篇的结构方面进行相关的思考。2. 语篇、话语与篇章语篇(text)和话语(discourse)、篇章(discourse)之间有着一定的联系。在系统功能语言学中,语篇和话语没有什_篇章结构

linux下flowable流程图乱码或图片中文乱码问题_flowjo界面错乱-程序员宅基地

文章浏览阅读1.5k次。将缺少的字体(如simhei.ttf、simsun.ttc)上传到jdk目录/usr/local/jdk8/jdk1.8.0_201/jre/lib/fonts和/usr/share/fonts 文件夹下_flowjo界面错乱

VUE+ElementUI使用日期选择器时间少8小时_表格导出来的时间与平台相差8小时-程序员宅基地

文章浏览阅读2.5k次,点赞3次,收藏7次。VUE+ElementUI使用日期选择器时间少8小时_表格导出来的时间与平台相差8小时

百度地图2.0离线版的制作_js百度地图离线2.0-程序员宅基地

文章浏览阅读1.9w次,点赞4次,收藏31次。感谢前辈共享出来,不过时间有点长了,有些细节有些变动,修改了一下转载 : https://my.oschina.net/smzd/blog/5485381. 下载API主文件通过http://api.map.baidu.com/api?v=2.0获取API主文件的链接获取API主文件http://api.map.baidu.com/getscript?v=2.0&ak=&services=&t=_js百度地图离线2.0

ubuntu系统remmina连接到windows无法复制和粘贴_remmina 复制粘贴文件-程序员宅基地

文章浏览阅读1k次。杀死这个进程,在重新启动,关闭remmina在重新连接进来,就可以从ubuntu到windows之间进行复制和粘贴了。_remmina 复制粘贴文件

推荐文章

热门文章

相关标签