unity 3d 通过游戏对象的名子查到其对象

  • transform.Find() 仅查找当前对象的子层级,效率远高于全局查找;
  • 支持嵌套路径(如"A/B/C"),可以直接定位深层子对象;
  • 核心优势 :能找到非激活(SetActive (false))的子对象(这是和GameObject.Find()的最大区别)。
cs 复制代码
using UnityEngine;

public class FindChildObject : MonoBehaviour
{
    private GameObject childObject;

    void Start()
    {
        // 方式1:查找直接子对象(当前对象的一级子物体)
        Transform childTrans = transform.Find("DirectChildName");

        // 方式2:查找嵌套子对象(通过路径,支持多层嵌套)
        // Transform nestedTrans = transform.Find("ParentChild/SubChild/GrandChild");

        if (childTrans != null)
        {
            childObject = childTrans.gameObject;
            Debug.Log("成功找到子对象:" + childObject.name);
        }
        else
        {
            Debug.LogError("未找到指定的子对象!");
        }
    }
}
全局查找(GameObject.Find ())

适用于查找场景中任意位置的激活状态游戏对象,是最基础的全局查找方式。

cs 复制代码
using UnityEngine;

public class FindGlobalObject : MonoBehaviour
{
    // 缓存找到的对象,避免重复查找
    private GameObject targetObject;

    void Start()
    {
        // 核心代码:通过名称全局查找游戏对象
        targetObject = GameObject.Find("TargetObjectName"); // 替换为你要找的对象名

        // 判空处理(避免空引用报错)
        if (targetObject != null)
        {
            Debug.Log("成功找到对象:" + targetObject.name);
            // 示例操作:修改找到对象的位置
            targetObject.transform.position = new Vector3(0, 2, 0);
        }
        else
        {
            Debug.LogError("未找到名为【TargetObjectName】的游戏对象!");
        }
    }

    // 后续使用缓存的对象(比如在Update中)
    void Update()
    {
        if (targetObject != null)
        {
            // 执行你需要的逻辑
        }
    }
}
  • GameObject.Find() 会遍历场景中所有激活状态(SetActive (true)) 的游戏对象,性能开销较大;
  • 名称大小写敏感(比如 "Player" 和 "player" 是两个不同名称);
  • 绝对不要在Update/FixedUpdate等高频调用的函数中直接使用,务必在Start/Awake中查找并缓存。
相关推荐
海兰2 小时前
【文字三国志:第三篇】天命重构,数据模型设计
人工智能·游戏
玉夏7 小时前
【Shader基础】ShaderLab 语法
unity·游戏引擎
科技每日热闻8 小时前
EVNIA弈威天王星舒视蓝4.0系列护眼显示器24M2N2200PK新品——小而强悍,久战不倦!
科技·游戏·计算机外设
玖玥拾8 小时前
Cocos学习笔记:自定义字体、骨骼动画与项目架构
游戏引擎·cocos2d
魔法阵维护师10 小时前
从零开发游戏需要学习的c#模块,第二十八章(血条显示 —— 敌人与玩家生命可视化)
学习·游戏·c#
玖玥拾11 小时前
Cocos学习笔记:渲染组件、摄像机系统与物理关节
游戏引擎·cocos2d
WarPigs11 小时前
Unity部署MessagePack
unity·游戏引擎
ShyanZh12 小时前
从0开始做自己的免费游戏聚合站(二):游戏详情页、深色模式与倒计时组件
游戏·喜加一·免费送游戏
☆平常心☆12 小时前
Unity插件MagicLightmapSwitcher修改灯光强度大于100
unity·游戏引擎
魔法阵维护师12 小时前
从零开发游戏需要学习的c#模块,第二十九章(经验值与升级系统)
学习·游戏·c#