【Unity】获取游戏对象或组件的常用方法

前言

在Unity开发过程中,我们经常需要获取组件,那么在Unity里如何获取组件呢?

一、获取游戏对象

1.GameObject.Find

GameObject.Find 是通过物体的名称获取对象的

所以会遍历当前整个场景,效率较低

而且只能获取激活状态的物体对象

2.Transform.Find

Transform.Find 可以在一个游戏对象的子对象中查找指定名称

查找对象的名称必须是唯一的。如果有多个同名的子对象,只会返回其中一个对象,且无法保证返回的是哪一个。

修改一下刚刚的方法,来测试一下

3.GameObject.FindWithTag

GameObject.FindWithTag:在场景中查找具有指定标签的 GameObject 对象,并返回第一个匹配且是激活状态的对象。

4.GameObject.FindGameObjectWithTag

GameObject.FindGameObjectWithTag :用法与FindWithTag相同

GameObject.FindGameObjectsWithTag:用法与FindWithTag相同,返回数组

5.Transform.GetChild

Transform.GetChild可以获取当前物体的子对象,返回一个 Transform 对象。可以使用该方法遍历整个层级结构。

子对象的索引是从 0 开始。例如,transform.GetChild(0) 表示获取当前 Transform 组件的第一个子对象。

csharp 复制代码
        // 查找UnityObj 
        GameObject obj1 = GameObject.Find("UnityObj");
        //获取obj1的子对象个数
        int count = obj1.transform.childCount;

        for (int i = 0;i < count;i++)
        {
            Transform child = obj1.transform.GetChild(i);

            Debug.Log(child.name);
 
        }

5.Transform.parent

Transform.parent可以获取对象的父集对象

二、获取组件

1.GameObject.GetComponent相关

GameObject.GetComponent(): 获取当前物体组件类型的引用
GameObject.GetComponents(): 获取当前物体所有组件类型的引用

GameObject.GetComponentInParent(): 在父级中查找指定类型的组件。会沿着组件的父级链一直向上查找,直到找到指定类型的组件或者到达根对象为止。如果找到了则会返回该组件的引用,否则返回 null。
GameObject.GetComponentsInParent(): 原理同上,返回所有查找的目标数组

GameObject.GetComponentInChildren(): 在子级中查找指定类型的组件。会沿着组件的子级链一直向下查找,直到找到指定类型的组件或者到达最后一个子对象为止。如果找到了则会返回该组件,否则返回 null。
GameObject.GetComponentsInChildren(): 原理同上,返回所有查找的目标数组

2.GameObject.FindObject相关

csharp 复制代码
		//查找Image组件
        Image img1 = GameObject.FindObjectOfType<Image>();
        //查找Image组件,包含未激活的组件
        Image img2 = GameObject.FindObjectOfType<Image>(true);
        //查找所有Image组件,返回组件列表
        Image[] imgList = Resources.FindObjectsOfTypeAll<Image>();
        //返回与指定类型匹配的第一个活动加载对象。如果没有与指定的类型匹配,返回null。
        Image img3 = GameObject.FindFirstObjectByType<Image>();
        //返回与指定类型匹配的任意活动加载对象。如果没有与指定类型匹配的对象,返回null。
        Image img4 = GameObject.FindAnyObjectByType<Image>();
相关推荐
kokunka13 小时前
【源码+注释】纯C++小游戏开发之射击小球游戏
开发语言·c++·游戏
ujainu14 小时前
Flutter + OpenHarmony 游戏开发进阶:主菜单架构与历史最高分持久化
flutter·游戏·架构·openharmony
一起养小猫16 小时前
Flutter for OpenHarmony 实战:2048游戏完整开发指南
flutter·游戏·harmonyos
毕设源码-邱学长16 小时前
【开题答辩全过程】以 基于python的游戏管理平台的开发为例,包含答辩的问题和答案
游戏
June bug17 小时前
【领域知识】休闲游戏一次发版全流程:Google Play + Apple App Store
unity
星夜泊客19 小时前
C# 基础:为什么类可以在静态方法中创建自己的实例?
开发语言·经验分享·笔记·unity·c#·游戏引擎
dzj202120 小时前
PointerEnter、PointerExit、PointerDown、PointerUp——鼠标点击物体,则开始旋转,鼠标离开或者松开物体,则停止旋转
unity·pointerdown·pointerup
qwerasda12385220 小时前
游戏场景中的敌方目标检测与定位实战使用mask-rcnn_regnetx模型实现
人工智能·目标检测·游戏
一起养小猫21 小时前
Flutter for OpenHarmony 实战:推箱子游戏完整开发指南
flutter·游戏·harmonyos
子春一21 小时前
Flutter for OpenHarmony:构建一个 Flutter 数字华容道(15-Puzzle),深入解析可解性保障、滑动逻辑与状态同步
flutter·游戏