Unity中的各种寻找GameObject方法

发表于2018-05-14
评论1 1.56w浏览
开发时遇到的主要问题是查找隐藏对象,下面就和大家介绍几种寻找GameObject的方法。

1.GameObject.Find():寻找Hierarchy面板中的activie 不为false的游戏对象;

路径如官方事例写法:
public class ExampleClass : MonoBehaviour {
    public GameObject hand;
    void Example() {
        hand = GameObject.Find("Hand");
        hand = GameObject.Find("/Hand");
        hand = GameObject.Find("/Monster/Arm/Hand");
        hand = GameObject.Find("Monster/Arm/Hand");
    }
}

2.Transform.Find()

官方解释是通过名字获取到一个子物体(Finds a child by name and returns it),该方法可以获取到隐藏(inactive)的GameObject,

可以通过先获得父对象(active必须为true),再通过寻找孩子Transform.Find()
       GameObject rootObj = GameObject.Find("GameObject");       
         GameObject transformObj=  rootObj.transform.Find("xxxx").gameObject;
          transformObj.SetActive(true)

Find()方法只能直接去找子节点,如果你想找 孙节点,那么可以用”/“符号把层级关系隔开,找起来很方便。同样无论”xxxx”对象是否active = true 都是可以直接找到对象的。
GameObjectcube=  root.transform.Find("xxxx/Cube").gameObject;

3.transform.GetChild(index);index为索引,0,1,2,3,4代表第几个child.

补充:关于场景中的消失
gameObject.renderer.enabled
//是控制一个物体是否在屏幕上渲染或显示  而物体实际还是存在的 只是想当于隐身 而物体本身的碰撞体还依然存在的
gameObject.Destroy()
//表示移除物体或物体上的组件 代表销毁该物体  实际上该物体的内存并没有立即释放 而是在你下下个场景中槽释放内存资源,就是你a场景中Destroy了 一般是在c场景中才真正释放该物体的内存资源(这是我的体会 不知道理解错误没)

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引