1.添加tag
GameObject obj = GameObject.FindWithTag("Player");
仅适用于tag场景中只有一个player tag时,若场景中有多个player tag,也只返回一个(场景中你最后创建的那个游戏物体)
注意:无论运行该函数的游戏物体处于哪个父子层级,也无论目标tag处于哪个父子层级均能正常找到(遍历所有游戏物体)
2.GameObject.FindGameObjectsWithTag
GameObject[] objs = GameObject.FindGameObjectsWithTag("Player");
foreach (GameObject obj in objs)
{
Debug.Log(obj.name);
}
查找所有目标tag的游戏物体
3.transform.find
Transform t = transform.Find("3");
Debug.Log(t.name);
注意:该函数只能查找运行该函数的游戏物体下的子物体
4.GetComponentsInChildren<>()
4.1.GetComponentsInChildren<Transform>()
public Transform[] transforms;
private void Start()
{
test_4();
}
public void test_4()
{
GameObject obj = GameObject.FindWithTag("Player");
transforms = obj.GetComponentsInChildren<Transform>();
}
注意:其中1的tag为player,GetComponentsInChildren<Transform>()包含自身的transform
4.2GetComponentsInChildren<test>()
public test[] transforms;
private void Start()
{
test_4();
}
public void test_4()
{
GameObject obj = GameObject.FindWithTag("Player");
transforms = obj.GetComponentsInChildren<test>();
}
注意:1的tag为player,1与3-2与2-3没有挂载test脚本
总结:GetComponentsInChildren<>()包含自身的Component
5.遍历所有子物体(包含孙物体)
GameObject obj = GameObject.FindWithTag("Player");
transforms = obj.GetComponentsInChildren<Transform>();
test_6(obj.transform);
public void test_6(Transform transform)
{
foreach (Transform t in transform.GetComponentsInChildren<Transform>())
{
Debug.Log(t.name);
}
}
注意:这里包含了1这个游戏物体
6.遍历所有子物体(不包括孙物体)
GameObject obj = GameObject.FindWithTag("Player");
transforms = obj.GetComponentsInChildren<Transform>();
test_7(obj.transform);
public void test_7(Transform transform)
{
foreach (Transform t in transform)
{
Debug.Log(t.name);
}
}
7.正确的Destroy()销毁游戏物体的方式
GameObject obj = GameObject.FindWithTag("Player");
transforms = obj.GetComponentsInChildren<Transform>();
test_8(obj.transform);
public void test_8(Transform transform)
{
List<GameObject> lst = new List<GameObject>();
foreach(Transform t in transform)
{
lst.Add(t.gameObject);
}
for (int i = 0; i < lst.Count;i++)
{
Destroy(lst[i]);
}
}
注意:某些时候也可以使用
foreach(Transform t in transform)
{
Destroy(t.gameObject);
}
8.判断一个游戏物体下是否有子物体
if(transform.childCount > 0)