最清晰的Unity查找物体的几种方法及优缺点详解!其他教程有很多没注意的地方,请看这里!

近日研究了一下Unity的基本查找物体的方法,发现网上坑还是挺多的

无论是哪种方法,为了性能的考虑,请不要将获取物体的代码写在Update里

注意:

请注意GameObject和gameObject的区别

请注意Transform和transform的区别

最清晰的Unity查找物体的几种方法及优缺点详解!其他教程有很多没注意的地方,请看这里!

查找物体的6种方法 方法 优点 缺点  
GameObject
(Unity的所有物体的基类,针对全局,方法是静态方法,所以可以直接用)
注意:非gameObject,注意大小写,gameObject指的是该物体,gameObject无这些方法
GameObject.Find(物体名字) 递归遍历全局物体,直到找到 第一个 为Capsule的物体 全局搜索 1.无法查找隐藏对象
2.效率低下(相当于递归遍历查找)
 
GameObject.Find("GameObject/ChildGameObject); 通过路径查找 1:解决查找中可能出现的重名问题。
2:如果有完全的路径,减少查找范围,减少查找时间。
1.路径或结构调整后,需要重新调整路径字段。
2.如果路径查找中的任何一个父节点被隐藏(Active=false),这个对象都将查找不到。
 
GameObject.FindWithTag(Tag字段)/FindGameObjectsWithTag(Tag字段) 全局找到 (第一个)/(所有) Tag为Capsule的物体 tag的搜索速度比Find来的快    
transform
(是本物体的transform的组件,所以查找都是针对本物体的)
注意:非Transform,注意大小写,Transform指的是Transform类型,Transform无这些方法
transform.Find(物体名字) 找到该脚本挂的物体的 第一个 为Capsule的孩子(本质为路径查找) 1.可以查找隐藏对象
2.支持路径查找
3.查找隐藏对象的前提是transform所在的根节点必须可见(active=true)
1.局部查找
2.不能直接找到平级的物体及他们的孩子
效率比GameObject高,强烈建议使用
transform.GetChild(Index) 找到该脚本挂的物体的 第一个孩子 效率高 1.局部查找
  Resources.FindObjectsOfTypeAll () 返回指定类型的对象列表(如XXXScript)。主要用于编辑器中,eg。检测内存泄露、批量查找的功能等 用的少,几乎不用 用得少,几乎不用