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
|
22天前
|
图形学 开发者
【Unity小技巧】unity移动物体的探究——使用8个不同方法
【Unity小技巧】unity移动物体的探究——使用8个不同方法
17 1
|
22天前
|
图形学
【unity小技巧】实现投掷物品,比如长矛,刀具,手榴弹和其他物体
【unity小技巧】实现投掷物品,比如长矛,刀具,手榴弹和其他物体
10 1
|
22天前
|
图形学
【unity小技巧】Unity人物衣服布料系统的探究 —— Cloth组件
【unity小技巧】Unity人物衣服布料系统的探究 —— Cloth组件
7 0
|
22天前
|
图形学
【unity小技巧】创建FPS击中物体URP贴花
【unity小技巧】创建FPS击中物体URP贴花
10 0
|
22天前
|
人工智能 图形学
【unity小技巧】使用动画状态机脚本实现一个简单3d敌人AI功能
【unity小技巧】使用动画状态机脚本实现一个简单3d敌人AI功能
14 0
|
22天前
|
人工智能 定位技术 图形学
【Unity小技巧】一个脚本实现控制3D远程/近战敌人AI
【Unity小技巧】一个脚本实现控制3D远程/近战敌人AI
17 0
|
22天前
|
自然语言处理 图形学
【unity实战】一个通用的FPS枪支不同武器射击控制脚本
【unity实战】一个通用的FPS枪支不同武器射击控制脚本
16 0
|
22天前
|
开发工具 图形学
【推荐100个unity插件之11】Shader实现UGUI的特效——UIEffect为 Unity UI 提供视觉效果组件
【推荐100个unity插件之11】Shader实现UGUI的特效——UIEffect为 Unity UI 提供视觉效果组件
22 0
|
23天前
|
算法 图形学
【推荐100个unity插件之4】OpenFracture插件实现unity3d物体破裂和切割
【推荐100个unity插件之4】OpenFracture插件实现unity3d物体破裂和切割
11 0