热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[CocosCreator][Unity]获得子物体的方法(递归,深度优先,广度优先)

以CocosCreator为例,Unity3D同理。这里提供三种获得子物体的方式。***从目标节点及其子孙节点中找到满足name的节点.*未找到满足条件的ÿ

以CocosCreator为例,Unity3D同理。这里提供三种获得子物体的方式。

/*** 从目标节点及其子孙节点中找到满足&#96;name&#96;的节点.* 未找到满足条件的&#xff0c;返回null* &#64;param targetNode * &#64;param name */public static Search(targetNode: cc.Node, name: string): cc.Node {if (targetNode.name &#61;&#61; name) {return targetNode;}for (let i &#61; 0; i < targetNode.children.length; i&#43;&#43;) {const child &#61; targetNode.children[i];let result &#61; this.Search(child, name);if (result !&#61; null) {return result;}}return null;}/*** 从子孙节点中找到第一个名字符合的节点&#xff0c;不包括目标节点本身。* 使用 深度优先的方式。* 若没有找到&#xff0c;则返回null* &#64;param targetNode * &#64;param name */public static FindChildByName(targetNode: cc.Node, name: string): cc.Node {for (let i &#61; 0; i < targetNode.children.length; i&#43;&#43;) {const child &#61; targetNode.children[i];if (child.name &#61;&#61; name) {return child;}let result &#61; this.FindChildByName(child, name);if (result !&#61; null)return result;}return null;}/*** 从子孙节点中找到第一个名字符合的节点&#xff0c;不包括targetNode节点本身。* 使用 广度优先的方式。* 若没有找到&#xff0c;则返回null* &#64;param targetNode * &#64;param name */public static FindChildByName2(targetNode: cc.Node, name: string): cc.Node {let queue: Queue<cc.Node> &#61; new Queue();queue.Enqueue(targetNode);while (queue.Count() > 0) {let t &#61; queue.Dequeue();if (t.name &#61;&#61; name) {if (t !&#61; targetNode) {return t;}}for (let i &#61; 0; i < t.children.length; i&#43;&#43;) {const element &#61; t.children[i];queue.Enqueue(element);}}return null;}

参考文档

https://answers.unity.com/questions/799429/transformfindstring-no-longer-finds-grandchild.html


推荐阅读
  • 三角测量计算三维坐标的代码_双目三维重建——层次化重建思考
    双目三维重建——层次化重建思考FesianXu2020.7.22atANTFINANCIALintern前言本文是笔者阅读[1]第10章内容的笔记,本文从宏观的角度阐 ... [详细]
  • 本文详细介绍了Java反射机制的基本概念、获取Class对象的方法、反射的主要功能及其在实际开发中的应用。通过具体示例,帮助读者更好地理解和使用Java反射。 ... [详细]
  • JUC(三):深入解析AQS
    本文详细介绍了Java并发工具包中的核心类AQS(AbstractQueuedSynchronizer),包括其基本概念、数据结构、源码分析及核心方法的实现。 ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
  • 经过两天的努力,终于成功解决了半平面交模板题POJ3335的问题。原来是在`OnLeft`函数中漏掉了关键的等于号。通过这次训练,不仅加深了对半平面交算法的理解,还提升了调试和代码实现的能力。未来将继续深入研究计算几何的其他核心问题,进一步巩固和拓展相关知识。 ... [详细]
  • 本文介绍了 Java 中 io.netty.channel.kqueue.KQueueStaticallyReferencedJniMethods.evfiltSock() 方法的使用及其代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • Vision Transformer (ViT) 和 DETR 深度解析
    本文详细介绍了 Vision Transformer (ViT) 和 DETR 的工作原理,并提供了相关的代码实现和参考资料。通过观看教学视频和阅读博客,对 ViT 的全流程进行了详细的笔记整理,包括代码详解和关键概念的解释。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 链表作为一种与数组并列的基本数据结构,在Java中有着广泛的应用。例如,Java中的`ArrayList`基于数组实现,而`LinkedList`则是基于链表实现。链表在遍历操作时具有独特的性能特点,特别是在插入和删除节点时表现出色。本文将详细介绍单向链表的基本概念、操作方法以及在Java中的具体实现,帮助读者深入理解链表的特性和应用场景。 ... [详细]
  • NOIP2000的单词接龙问题与常见的成语接龙游戏有异曲同工之妙。题目要求在给定的一组单词中,从指定的起始字母开始,构建最长的“单词链”。每个单词在链中最多可出现两次。本文将详细解析该题目的解法,并分享学习过程中的心得体会。 ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
author-avatar
mobiledu2502889883
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有