博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity查找物体的四大主流方法及区别
阅读量:5124 次
发布时间:2019-06-13

本文共 2112 字,大约阅读时间需要 7 分钟。

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 (http://www.my516.com) {

things = FindObjectsOfType<GameObject>();

thing = FindObjectOfType<GameObject>();

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

for(int i = 0; i < things.Length; i++)
{
Debug.Log(things[i].name);
}
}
}
--------------------- 

转载于:https://www.cnblogs.com/hyhy904/p/11021141.html

你可能感兴趣的文章
MFC中CString.Format的用法
查看>>
【转发】响应式Web设计?怎样进行?
查看>>
iOS项目开发— CoreLocation的定位服务和地理编码与发编码实现
查看>>
springBoot修改代码不需要重启-热部署
查看>>
18.QT-QPlainEdit 信号与槽
查看>>
Linux-使用之vim出现的问题
查看>>
资料收藏夹
查看>>
bzoj4380[POI2015]Myjnie dp
查看>>
jquery动画 -- 1.加载指示器
查看>>
基础C#总结
查看>>
CSS基础选择器(选择器的优先级),CSS样式块( 长度/颜色/显示方式/文本样式),盒模型组成,盒模型-block,盒模型布局...
查看>>
strcpy、memcpy和memset的区别
查看>>
AI单挑Dota 2世界冠军:被电脑虐哭……
查看>>
Python3 循环
查看>>
动画---图形图像与动画(三)Animation效果的XML实现
查看>>
题解 P5301 【[GXOI/GZOI2019]宝牌一大堆】
查看>>
Longest Valid Parentheses
查看>>
Android 中的 Service 全面总结
查看>>
delphi下实现ribbon界面的方法(一)
查看>>
Windows 8操作技巧之快捷键大全
查看>>