Unity中的各种寻找GameObject方法

本文介绍了Unity中GameObject和Transform的查找方法,包括GameObject.Find()和Transform.Find()的区别及使用场景,并探讨了GameObject的激活状态与销毁机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 都是可以直接找到对象的。


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




补充:关于场景中的消失

  1. gameObject.renderer.enabled   
  2. //是控制一个物体是否在屏幕上渲染或显示  而物体实际还是存在的 只是想当于隐身 而物体本身的碰撞体还依然存在的  
  3.   
  4. gameObject.Destroy()    
  5. //表示移除物体或物体上的组件 代表销毁该物体  实际上该物体的内存并没有立即释放 而是在你下下个场景中槽释放内存资源,就是你a场景中Destroy了 一般是在c场景中才真正释放该物体的内存资源(这是我的体会 不知道理解错误没)  
Unity中,GameObject.Find() 方法用于通过名称查找场景中的 GameObject 对象。该方法有两种重载方式: 1. `GameObject.Find(string name)` 该方法接收一个字符串参数,表示要查找的 GameObject 的名称。它会在整个场景中寻找该名称的 GameObject,并返回第一个找到的对象。如果没有找到,则返回 null。 示例代码: ```csharp GameObject obj = GameObject.Find("Cube"); // 在场景中查找名称为 "Cube" 的 GameObject if (obj != null) { // 找到了该对象 } else { // 没有找到该对象 } ``` 2. `GameObject.Find(string name, Transform parent)` 该方法接收两个参数,第一个参数表示要查找的 GameObject 的名称,第二个参数表示在哪个 Transform 下查找。这个方法会在指定 Transform 的子对象中查找该名称的 GameObject,并返回第一个找到的对象。如果没有找到,则返回 null。 示例代码: ```csharp Transform parent = GameObject.Find("Parent").transform; // 找到名为 "Parent" 的 GameObject,并获取其 Transform 组件 GameObject obj = GameObject.Find("Cube", parent); // 在 Parent 的子对象中查找名称为 "Cube" 的 GameObject if (obj != null) { // 找到了该对象 } else { // 没有找到该对象 } ``` 需要注意的是,GameObject.Find() 方法会在整个场景中查找对象,因此如果场景中有大量对象时,这个方法可能会影响性能。如果需要查找的对象是在特定的场景中,可以使用 SceneManager.GetSceneByName() 方法找到该场景,然后在该场景中使用 GameObject.Find() 方法查找对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值