Unity项目报错:已挂载TextMeshPro却提示未附加至GameObject
问题解决:TextMeshPro组件找不到的排查与修复
核心问题:组件类型不匹配
Unity的TextMeshPro分两种核心组件:
TextMeshPro:用于3D场景的独立文本(直接挂载在普通GameObject上)TextMeshProUGUI:用于Canvas下的UI文本(所有UI文本默认使用该组件)
从你的场景截图来看,目标对象大概率是UI元素,你代码里用GetComponent<TextMeshPro>()自然找不到——因为实际挂载的是TextMeshProUGUI组件。
代码修正方案
把代码中所有TextMeshPro类型替换为TextMeshProUGUI,修改后的完整代码:
using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; public class NumIdentifier : MonoBehaviour { public GameObject[] codigosItem; int[] numCodigos; TextMeshProUGUI[] codigosTexto; // 替换组件类型 void Start() { GuardarCodigos(); } void Update() { } void GuardarCodigos() { codigosItem = GameObject.FindGameObjectsWithTag("Codigo"); codigosTexto = new TextMeshProUGUI[codigosItem.Length]; // 初始化对应类型数组 numCodigos = new int[codigosItem.Length]; for (int i = 0; i < codigosItem.Length; i++) { // 替换为UI文本组件的获取方式 codigosTexto[i] = codigosItem[i].GetComponent<TextMeshProUGUI>(); if (codigosTexto[i] != null) { Debug.Log(codigosTexto[i].text); int.TryParse(codigosTexto[i].text, out numCodigos[i]); } else { Debug.LogError("El objeto " + codigosItem[i].name + " no tiene un componente TextMeshProUGUI adjunto."); } } System.Array.Reverse(numCodigos); for(int i = 0;i < numCodigos.Length;i+=2) { int numReserva = numCodigos[i]; numCodigos[i] = numCodigos[i + 1]; numCodigos[i+1] = numReserva; } } }
额外排查点(若上述方案无效)
- 标签校验:确认所有目标物体的标签是
Codigo,Unity标签区分大小写,避免拼写错误 - 物体激活状态:
FindGameObjectsWithTag仅返回激活状态的物体,检查场景内目标物体是否被禁用 - 组件挂载位置:若组件在子物体上,改用
GetComponentInChildren<TextMeshProUGUI>(true)(参数true表示包含禁用的子物体) - 组件存在性确认:逐个检查带
Codigo标签的物体,确保TextMeshProUGUI组件已挂载且未被禁用
内容的提问来源于stack exchange,提问作者Marco M D
相关产品推荐
相关产品推荐

