Unity用脚本获取物体和组件(下)

news/2024/10/21 6:12:58/

一、应用父子关系

1、通过父子关系获取物体

仔细观察Hierarchy窗口会发现,其实拥有大量“父子关系”的物体已经构成了树形结构。在Unity中,“父子关系”的表达是Transform组件的职责。下表列出了在父子节点之间查找物体的相关方法和属性

                                           Transform组件中与查找物体相关的方法

方法名用途      参数和返回值
transform.Find在“父子关系树”中沿给定的路径查找物体的Transform组件

参数:以字符串表示一个路径。与文件路径类似,可以通过给定的路径信息,灵活找到任意其他物体。

返回值:找到物体的Transform组件。如果没找到,返回null。

transform.GetChild根据子物体的序号查找子物体

参数:一个整数,从0开始,表示要查找的子物体的序号。子物体的序号就是它在同一级的所有子物体中排第几个,也是Hierarchy窗口中子物体的顺序。

返回值:返回该子物体,如果下标超出范围则返回null

transform.GetSiblingIndex获得该物体在兄弟节点之间的序号

参数:无

返回值:序号。获得本物体在兄弟物体之间的序号

transform.IsChildeOf判断是否是另一个物体的子物体

参数:某个其他物体的Transform组件,不能为null

返回值:如果参数指定的物体是本物体的父物体,则返回true,否则返回false

 

                                         Transform组件中与查找物体相关的属性

属性名称含义与详细说明
transform.parent

获取该物体的父物体。

如果对它赋值,可以直接改变本物体的父物体,例如赋值为null代表将本物体放在最高层。

transform.root

沿着本物体的父物体一直向上查找,获取最上一级的父物体

transform.childCount

获取该物体的子物体总数,不包含子物体的子物体。

与transform.GetChild()方法结合使用可以用来遍历所有子物体。

2、通过父子路径获取物体

通过路径,可以一次移动很多步。

查找物体的路径与操作系统的文件路径类似。当需要指明下一级节点时,就写出该节点的名称。如果还要继续指明下一级,就加上斜杠“/”分隔。如果要引用上一级节点,使用两个英文句号“..”即可。这样一来,理论上从一个物体出发就可以获取到场景中任意一个节点

3、一些有用的方法

   

方法用途参数和返回值
GetComponentInChildren从所有子物体中查找某种组件

参数:需要用泛型指定查找的类型

返回值:找到的第一个组件

GetComponentsInChildren从所有子物体中查找所有某种组件

参数:需要用泛型指定查找的类型

返回值:包含所有该类型组件的数组

GetComponentInParent从父物体中查找某种组件

参数:需要用泛型指定查找的类型

返回值:找到的第一个组件

GetComponentsInParent从父物体中查找所有某种组件

参数:需要用泛型指定查找的类型

返回值:包含所有该类型组件的数组

二、利用公开变量引用物体和组件

举例如下

using UnityEngine;public calss TestGetTransform : MonoBehaviour
{public GameObject other;public Transform otherTrans;public MeshFilter otherMesh;public Rigidbody otherRigid;void Start(){//可以任意使用前面的变量}
}

 在Inspector界面,将相应的对象或者组件拖曳到对应框框内,就可以了。这种方式非常直观,而且可以用组件类型作为限制,防止拖入错误类型的物体。

总结:

获取物体和组件的方式有以下几种:

  • 通过名称或标签,找到任意未禁用的物体
  • 通过父子关系,从一个物体出发,可以沿路找到任意物体
  • 只要获得了某个游戏物体或该物体上的任意组件,就可以得到所有其他组件,也可以通过任意组件获得物体本身
  • 可以遍历某个物体下一级的所有子物体
  • 可以用公开变量的方式,在编译器里拖曳选择物体

http://www.ppmy.cn/news/63964.html

相关文章

基于络达SOC AB1562A TWS蓝牙耳机设计

V hezkz17进数字音频答疑 一 原理框图 二 电子电路设计 (1)SOC主芯片 (2) 最小系统晶振电路设计26MHZ (3) 电池电路设计 4 充电电路与充电保护设计 5 LED输出电路设计</

【C++】 类基础汇总(类封装,构造、析构函数...)

目录 前言 正文 类封装 为什么要进行类封装 概念 访问修饰符 构造函数 概念 特点 析构函数 概念 特点 再谈面向过程与面向对象 面向过程 代码举例 面向对象 代码举例 结语 下期预告 前言 在学习过【C语言进阶C】 C基础--让你丝滑的从C语言进阶到C 之后&am…

智能改写工具免费-智能改写工具

中文改写软件 您好&#xff0c;中文改写软件是使用人工智能技术改写中文文本的工具。它可以自动识别并改写文本中的某些词语、短语或句子&#xff0c;以使它们在语意上更为准确、清晰或通顺。 中文改写软件的工作原理基于自然语言处理技术。它使用预先训练好的模型&#xff0…

python数据类型总结

标准数据类型 Python 有以下几种标准数据类型&#xff1a; 整数&#xff08;int&#xff09;&#xff1a;表示整数值&#xff0c;如 1, -5, 0 等。浮点数&#xff08;float&#xff09;&#xff1a;表示小数值&#xff0c;如 3.14, -0.01, 1.0 等。字符串&#xff08;str&…

深度学习细节总结

计算机视觉 目标检测&#xff0c;语义分割&#xff0c;目标分类 自然语言处理NLP 数据结构 数据结构 访问元素 线性回归 可以看成是一个单层的神经网络&#xff0c;有显式的解 优化算法 梯度下降&#xff0c;超参数&#xff1a;学习率、批量大小 分类回归 单层感知机…

3.0 响应式系统的设计与实现

1、Proxy代理对象 Proxy用于对一个普通对象代理&#xff0c;实现对象的拦截和自定义&#xff0c;如拦截其赋值、枚举、函数调用等。里面包含了很多组捕获器&#xff08;trap&#xff09;&#xff0c;在代理对象执行相应的操作时捕获&#xff0c;然后在内部实现自定义。 const…

【Windows】高效的本地文件搜索工具《Everything》

&#x1f433;好用高效的本地文件搜索工具《Everything》 &#x1f9ca;一、什么是Everything&#x1f9ca;二、为什么选择Everything&#x1f9ca;三、下载Everything&#x1f9ca;四、Everything为什么高效 &#x1f9ca;一、什么是Everything Everything是一个运行于Window…

java内部类详解(IT枫斗者)

java-内部类详解 内部类概念 定义:把类定义在其他类的内部&#xff0c;这个类被称为内部类&#xff08;嵌套类&#xff09;。分类:根据其所在位置及形式的不同,分为成员内部类、静态内部类、局部内部类、匿名内部类。 成员内部类 联想到成员变量和成员方法&#xff0c;内部类…