Unity中经常需要查找对象,对应的API也有好几种,各自有不同的适用场合。

1. GameObject.Find

通过名字或路径查找游戏对象。

GameObject.Find("GameObject");

GameObject.Find("GameObject/ChildGameObject);

该方法只会返回一个active的,即未隐藏对象。

如果参数包含 '/' 字符,它会像路径名一样遍历层次结构,所以效率低。故建议在Start()或Awake()中查找对象并保存引用,切忌在Update()中动态查找。

官方手册上的两个TIps: 1.如果您希望找到子 GameObject,使用 Transform.Find 通常更容易。

            2.如果游戏运行有多个场景,则 Find 将搜索所有场景。

 

2. Transform.Find

返回该gameobject的子物体(如果未查找到则返回null),如果参数包含 '/' 字符,它会像路径名一样遍历层次结构,并且可以找到隐藏的物体。

需要注意的是Transform.Find的遍历并不会遍历整个层级结构,而是遍历该Transform的物体下面的子层级结构。

 

3. GameObject.FindWithTag

返回第一个标签为指定值的对象,所以当场景中有多个带相同标签的物体时不一定能返回正确的对象