unity通过物体名查找_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();

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();

thing = FindObjectOfType();

Debug.Log("第一个" + thing.name);

for(int i = 0; i < things.Length; i++)

{

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

}

}

}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值