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

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

一、应用父子关系

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

总结:

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

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


相关文章
|
2月前
|
存储 人工智能 Java
Unity优化——脚本优化策略4
Unity优化——脚本优化策略4
|
2月前
|
存储 人工智能 缓存
Unity优化——脚本优化策略3
Unity优化——脚本优化策略3
|
2月前
|
存储 缓存 Java
Unity优化——脚本优化策略2
Unity优化——脚本优化策略2
|
2月前
|
存储 XML 缓存
Unity优化——脚本优化策略1
Unity优化——脚本优化策略1
|
4月前
|
编解码 前端开发 人机交互
【Unity 3D】UI系统中UGUI各个组件的详细讲解(附源码 超详细)
【Unity 3D】UI系统中UGUI各个组件的详细讲解(附源码 超详细)
83 0
|
4月前
|
C# 图形学
【Unity 3D】游戏对象、添加删除获取组件、预制体Prefabs简介
【Unity 3D】游戏对象、添加删除获取组件、预制体Prefabs简介
75 0
|
4月前
|
API C# 图形学
【Unity 3D】常见API的讲解以及在C#脚本中的执行(附源码)
【Unity 3D】常见API的讲解以及在C#脚本中的执行(附源码)
64 1
|
4月前
|
人工智能 算法 BI
Unity——脚本与导航系统
Unity——脚本与导航系统
|
4月前
|
C# 图形学
【Unity 3D】元宇宙案例之虚拟地球信息射线实战(附源码、演示视频和步骤 超详细)
【Unity 3D】元宇宙案例之虚拟地球信息射线实战(附源码、演示视频和步骤 超详细)
50 0
|
4月前
|
人工智能 自然语言处理 区块链
【Unity 3D】元宇宙概念、应用前景、价值链等概述
【Unity 3D】元宇宙概念、应用前景、价值链等概述
52 0