You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从游戏对象中获取子TextMeshPro组件并编程读取其文本?

获取子物体的TextMeshPro组件并读取文本内容

在Unity中,你可以通过以下几种方式获取目标游戏对象子层级的TextMeshPro组件,并读取其文本内容:

方法1:获取第一个匹配的TextMeshPro组件

使用GetComponentInChildren<T>()递归查找当前对象及其子物体中的第一个目标组件:

using TMPro;
using UnityEngine;

public class ReadTMPText : MonoBehaviour
{
    void Start()
    {
        // 查找当前对象或其子物体中的第一个TextMeshPro组件
        TextMeshPro tmpComponent = GetComponentInChildren<TextMeshPro>();
        
        if (tmpComponent != null)
        {
            string textContent = tmpComponent.text;
            Debug.Log("读取到的文本:" + textContent);
        }
        else
        {
            Debug.LogWarning("未找到任何TextMeshPro组件");
        }
    }
}

如果目标是TextMeshPro输入框(TMP_InputField),可以直接读取输入框的text属性,或者获取其内部的显示文本组件:

using TMPro;
using UnityEngine;

public class ReadTMPInputText : MonoBehaviour
{
    void Start()
    {
        // 获取输入框组件
        TMP_InputField inputField = GetComponentInChildren<TMP_InputField>();
        
        if (inputField != null)
        {
            // 直接读取输入框的输入文本
            string inputText = inputField.text;
            Debug.Log("输入框内容:" + inputText);
            
            // 读取占位符文本(如果需要)
            if (inputField.placeholder is TextMeshPro placeholder)
            {
                Debug.Log("占位符文本:" + placeholder.text);
            }
            
            // 读取输入框的显示文本组件内容
            if (inputField.textComponent != null)
            {
                Debug.Log("显示文本内容:" + inputField.textComponent.text);
            }
        }
        else
        {
            Debug.LogWarning("未找到TMP_InputField组件");
        }
    }
}

方法2:查找所有子物体中的TextMeshPro组件

如果需要获取所有子层级的TextMeshPro组件(包括禁用的),可以使用GetComponentsInChildren<T>():

using TMPro;
using UnityEngine;
using System.Collections.Generic;

public class FindAllTMPComponents : MonoBehaviour
{
    void Start()
    {
        List<TextMeshPro> allTmpComponents = new List<TextMeshPro>();
        // 第二个参数设为true,包含禁用的组件
        GetComponentsInChildren<TextMeshPro>(true, allTmpComponents);
        
        foreach (TextMeshPro tmp in allTmpComponents)
        {
            Debug.Log($"物体[{tmp.gameObject.name}]的文本内容:{tmp.text}");
        }
    }
}

注意事项

  • 必须引入TextMeshPro命名空间:using TMPro;,否则无法识别相关类
  • GetComponentInChildren默认不查找禁用组件,如需包含禁用组件,使用重载方法并传入true
  • 若层级结构复杂,建议通过物体名称、标签或直接指定子物体路径来定位组件,减少不必要的性能开销

内容的提问来源于stack exchange,提问作者Mike Ike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 22:07:26