Unity中能否使用多个TMP_Text或TextMeshPro组件?
关于多个TMP_Text组件的使用与标签调用问题
1. 能否添加多个TMP_Text组件?
完全可以。不管是在同一个GameObject上,还是不同GameObject上,都能挂载多个TMP_Text组件。你遇到内容只显示在第一个组件上的问题,通常是代码里只获取了第一个TMP_Text实例(比如用GetComponent<TMP_Text>()),没对其他组件做赋值操作。
如果是在同一个物体上挂了多个TMP_Text,想要获取全部实例,可以用GetComponents<TMP_Text>()方法,它会返回一个TMP_Text数组,之后就能分别给每个组件赋值:
TMP_Text[] tmpTexts = GetComponents<TMP_Text>(); // 给第一个组件赋值 tmpTexts[0].text = "第一个结果"; // 给第二个组件赋值 tmpTexts[1].text = "第二个结果";
如果是不同物体上的TMP_Text,确保每个组件都被正确引用或者通过查找方式获取到即可。
2. 给TMP_Text添加标签后如何调用?
注意:标签是给挂载TMP_Text的GameObject设置的,不是直接给组件加标签。先在Inspector面板给目标GameObject设置好标签,再通过以下方式调用:
- 获取单个带指定标签的TMP_Text:
如果场景中只有一个带该标签的物体,用GameObject.FindWithTag("你的标签名")找到物体后再提取组件:
GameObject targetObj = GameObject.FindWithTag("ResultText"); if(targetObj != null) { TMP_Text tmpText = targetObj.GetComponent<TMP_Text>(); tmpText.text = "需要显示的内容"; }
- 获取多个带指定标签的TMP_Text:
如果有多个同标签的物体,用GameObject.FindGameObjectsWithTag("你的标签名")获取所有物体,再逐个提取组件:
GameObject[] targetObjs = GameObject.FindGameObjectsWithTag("ResultText"); foreach(GameObject obj in targetObjs) { TMP_Text tmpText = obj.GetComponent<TMP_Text>(); // 可根据需求给不同组件赋值,比如按索引区分内容 tmpText.text = "对应结果内容"; }
另外提醒:FindWithTag这类查找方法运行时效率不算高,如果是固定的组件,更推荐在Inspector面板直接拖拽引用,性能更优。
内容的提问来源于stack exchange,提问作者Liora
相关产品推荐
相关产品推荐

