Unity查找物体的四大主流方法及区别
2020-12-12 21:13
标签:cto form generic nbsp orm mono tco 方法 transform GameObject.Find() 使用简单方便 不能查找被隐藏的物体,否则出现“空引用异常”,这是很多新人在查找出现空引用bug的原因。 using System.Collections; public class GameObjectFind : MonoBehaviour { private GameObject thing; void Start () { thing = GameObject.Find("C4"); 1 using System.Collections; public class TransformFind : MonoBehaviour { private Transform m_Transform; void Start () { m_Transform = gameObject.GetComponent Debug.Log(one.name); } 1 代码演示: using System.Collections; public class TagFind : MonoBehaviour { private GameObject thing; things = GameObject.FindGameObjectsWithTag("Player"); Debug.Log(things.Length); 1 代码演示: using System.Collections; public class FindObjectOfType : MonoBehaviour { private GameObject[] things; void Start (http://www.my516.com) { things = FindObjectsOfType Debug.Log("第一个" + thing.name); Unity查找物体的四大主流方法及区别 标签:cto form generic nbsp orm mono tco 方法 transform 原文地址:https://www.cnblogs.com/hyhy904/p/11001403.html
优点:
不会因为重名而报错,同时查找的是自上而下的第一个物体
缺点
全局查找(遍历查找),查找效率低,很消耗性能。
代码演示:
using System.Collections.Generic;
using UnityEngine;
thing.name = "thing";
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Transform.Find(),通过Transform组件查找子物体。
用这个方法查找物体时,根节点一定要处于“显示”状态,不能被隐藏。
用它查找孙物体及孙孙物体,一定要使用“绝对路径”,否则出现“空引用异常”。
代码演示:
using System.Collections.Generic;
using UnityEngine;
private GameObject one;
private GameObject two;
one = m_Transform.Find("D2").gameObject;
two = m_Transform.Find("D2/D3").gameObject;
Debug.Log(two.name);
}
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.Generic;
using UnityEngine;
private GameObject[] things;
void Start () {
thing = GameObject.FindGameObjectWithTag("Player");
Debug.Log(thing.name);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
FindObjectsOfType()
FindObjectsOfTypeAll():返回指定类型的对象列表。
using System.Collections.Generic;
using UnityEngine;
private GameObject thing;
thing = FindObjectOfType
for(int i = 0; i {
Debug.Log(things[i].name);
}
}
}
---------------------