Unity中的各种寻找GameObject方法

时间:2023-03-08 19:55:53
Unity中的各种寻找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)

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







补充:关于场景中的消失

  1. gameObject.renderer.enabled
  2. //是控制一个物体是否在屏幕上渲染或显示  而物体实际还是存在的 只是想当于隐身 而物体本身的碰撞体还依然存在的
  3. GameObject.Destroy()
  4. //表示移除物体或物体上的组件 代表销毁该物体  实际上该物体的内存并没有立即释放 而是在你下下个场景中槽释放内存资源,就是你a场景中Destroy了 一般是在c场景中才真正释放该物体的内存资源(这是我的体会 不知道理解错误没)
  5. gameObject.active
  6. //是否在场景中停用该物体   在你gameObject.active =false中 则你在场景中用find找不到该物体
  7. //如果该物体有子物体 你要用SetActiveRecursively(false) 来控制是否在场景中停用该物体(递归的)