首页 > 手游开发 > Unity3D > GameObject.Find() 能否查找隐藏的游戏对象?
2021
12-02

GameObject.Find() 能否查找隐藏的游戏对象?

GameObject.Find()能否查找隐藏的游戏对象

  1. GameObject.Find()
    通过场景里面的名子或者一个路径直接获取游戏对象。
    GameObject root = GameObject.Find(“GameObject”);

GameObject.Find()使用起来很方便,但是它有个缺陷,就是如果你的这个GameObject天生acive = false的话。那么你用GameObject.Find()是永远也无法获取它的对象的。如果对象都获取不到,那么对象身上脚本啊,组件啊啥的都是获取不到的,变成了没有意义的对象。
GameObject.Find()方法在游戏中的使用频率很高。但是它也很消耗性能。尤其是在Update方法中不要去 Find()游戏对象!

  1. 如果将物体天生的属性为false,物体就无法再继续使用,更不要提再设置为true
    但是如果想设置,就必须先将物体的SetActive设置为True,可以Awake()方法中将SetActive属性先设置为false,这样开始运行时物体的属性就为false(看做物体不存在),等再需要显示的时候,直接将物体的SetActive属性设置为true即可。这样就避免了天生属性为false的物体无法设置为true。

GameObject root = GameObject.Find(“root”);
root.SetActive(true); // 根节点不为空
root.transform.Find(“root/AnyChildObjectName”);

 3. **unity 还提供了几个获取游戏对象的方法**

GameObject.FindGameObjectsWithTag(“tag”)
GameObject.FindWithTag(“tag”)

根据一个标记来获取游戏对象,返回一个 或者 一个数组,我个人觉得这个两个方法没啥用,因为既然需要用到标记那么相比这个游戏对象必然是非常特殊的一个,所以我会把它存在内存中。

Object.FindObjectOfType
Object.FindObjectsOfType
Resources.FindObjectsOfTypeAll 

根据一个类型返回Object,比如 GameObject 、Texture、Animation 、甚至还可以是你自己写的一个脚本 的范型。它找起来很方便,可以返回一个 或者一个数组。 我觉得这几个方法其实游戏中也没啥用,不过在编辑器中使用的确实很频繁,比如你要做批量检查场景的工具,查找场景中有没有使用某个特殊类型的对象。 或者查看内存的占用量,看看当前内存中那些Texture没有被释放掉。 等等。

最后编辑:
作者:游戏创作者大陆

留下一个回复

你的email不会被公开。