Unity查找对象的几种方法

前言

在Unity开发中经常需要获取游戏对象,获取的方法有很多种本文就列举几种常用的方法

首先要了解两个类

  • GameObject
  • Transform
    GameObject表示的是游戏对象,Transform也可以表示游戏对象,它们之间可以互相转化
1
2
Transform t = gameobject.transform;
GameObject go = t.gameobject;

而它们的区别在于:GameObject更倾向于游戏体本身的属性,如物体激活状态,物体的名称,物体的标签,物体的渲染层等设置,而Transform更多是表述模型的层级关系也就是父子关系,和本身的位置旋转缩放等信息,所以当需要查找嵌套的物体时,优先使用Transform来查找模型,GameObject更适合在不关心物体层级关系的情况下查找,且通常是使用GameObject的静态方法查找,Transform则更多调用实例方法。

通过GameObject获取

  1. 已经知道物体的名称,并且它是唯一的
    GameObject.Find("对象名")
  2. 已经知道物体的标签,并且是唯一的
    GameObject.FindWithTag("标签名")
  3. 已经知道物体的标签,且有多个,返回一个GameObject数组
    GameObject.FindGameObjectsWithTag("标签名")

以上方法只能查找激活状态的物体

通过Transform获取

  1. 需要获取当前物体下的某个子物体(脚本挂载当前物体上)
    transform.Find("直接子物体的名称 or 子物体路径")
    如果需要查找的物体就在当前物体下,可以直接使用物体名称,如果需要查找物体在更深的位置(当前是a物体,其下有b物体,b下有c物体),需要通过路径:”b\c”来找到c物体。
  2. 查找所有包含组件Button的物体
    Transform.FindObjectsOfType<Button>()

Transform查找物体的好处是,它能找到被禁用(未激活)的物体