今天做个小Demo,将物品缩略图使用做成Button,点击对应的图片就生成缩略图对应的物品。为了提高效率就判断物品是否已经在场景中,如果存在就把enable属性设置为true,没有存在场景中就实例化生成。其中使用了GameObject.Find方法去判断结果发现了GameObject.Find无法找到隐藏的对象。于是就探寻了transform.Find的方法去解决。这里总结一下它们的区别。
GameObject.Find
- 无法查找隐藏对象 隐藏对象包括查找路径的任何一个父节点隐藏(active=false)
- 如果查找不在最上层,建议合理使用路径查找,路径查找是把双刃剑
- 优缺点:
- 优点1:解决查找中可能出现的重名问题。
- 优点2:如果有完全的路径,减少查找范围,减少查找时间。
- 缺点: 路径或结构调整后,容易影响到程序中的查找,需要重新定位查找路径。
- 如果路径查找中的任何一个父节点active=false,这个对象都将查找不到。
- 使用方便但效率低下 此查找相当于递归遍历查找,虽使用方便但效率堪忧,建议在Start()函数中查找对象并保存引用,切忌在Update()中动态查找。
transform.Find
-
可以查找隐藏对象
-
支持路径查找
-
查找隐藏对象的前提是transform所在的根节点必须可见,即active=true
-
优点:
- 相较于Game.Find,transform.Find更加节省资源。
找到问题的原因以后,使用了一个空物体empty去作为物品的容器,将实例化生成的物品作为empty的子物体。然后隐藏了以后使用transform.Find去查找到隐藏掉的对象并激动即可。
网友评论