Unity查找物体的四大主流方法及区别

Posted hyhy904

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity查找物体的四大主流方法及区别相关的知识,希望对你有一定的参考价值。

GameObject.Find()
优点:

使用简单方便
不会因为重名而报错,同时查找的是自上而下的第一个物体
缺点

不能查找被隐藏的物体,否则出现“空引用异常”,这是很多新人在查找出现空引用bug的原因。
全局查找(遍历查找),查找效率低,很消耗性能。
代码演示:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameObjectFind : MonoBehaviour

private GameObject thing;

void Start ()

thing = GameObject.Find("C4");
thing.name = "thing";


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Transform.Find(),通过Transform组件查找子物体。
用这个方法查找物体时,根节点一定要处于“显示”状态,不能被隐藏。
用它查找孙物体及孙孙物体,一定要使用“绝对路径”,否则出现“空引用异常”。
代码演示:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TransformFind : MonoBehaviour

private Transform m_Transform;
private GameObject one;
private GameObject two;

void Start ()

m_Transform = gameObject.GetComponent<Transform>();
one = m_Transform.Find("D2").gameObject;
two = m_Transform.Find("D2/D3").gameObject;

Debug.Log(one.name);
Debug.Log(two.name);


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
GameObject.FindGameObjectWithTag()和GameObject.FindGameObjectsWithTag(),通过Tag标签查找物体。
GameObject.FindGameObjectsWithTag():通过Tag标签查找到一组物体,返回一个数组。
GameObject.FindGameObjectWithTag():查找到这类tag标签,自上而下第一个物体。

代码演示:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TagFind : MonoBehaviour

private GameObject thing;
private GameObject[] things;
void Start ()

things = GameObject.FindGameObjectsWithTag("Player");
thing = GameObject.FindGameObjectWithTag("Player");

Debug.Log(things.Length);
Debug.Log(thing.name);


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
FindObjectsOfType()
FindObjectsOfTypeAll():返回指定类型的对象列表。

代码演示:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FindObjectOfType : MonoBehaviour

private GameObject[] things;
private GameObject thing;

void Start ()

things = FindObjectsOfType<GameObject>();
thing = FindObjectOfType<GameObject>();

Debug.Log("第一个" + thing.name);
for(int i = 0; i < things.Length; i++)

Debug.Log(things[i].name);



--------------------- 

以上是关于Unity查找物体的四大主流方法及区别的主要内容,如果未能解决你的问题,请参考以下文章

Unity查找物体的四大主流方法及区别

unity深度查找某个子物体和遍历所有子物体方法

Unity 查找物体对象

获取Unity3D中物体的几种方法

Unity3D使用 FBX 格式的外部模型 ② ( FBX 模型与默认 3D 模型的区别 | FBX 模型贴图查找路径 | FBX 模型可设置多个材质 )

查找物体