首页 > 解决方案 > 如何从实例化/克隆的游戏对象中获取 TextMeshProUGUI 组件?

问题描述

来自层次结构的图片:

等级制度

我实例化了 SlateUGUI 预制件,然后尝试使用以下命令访问突出显示的游戏对象“TextDebug”:

 TextMeshProUGUI text1 = SlateInstant.transform.Find("TextDebug").GetComponent<TextMeshProUGUI>();
 text1.text = "This works";

但是,它不起作用:错误:NullReferenceException:对象引用未设置为对象的实例

我对使用有点怀疑,GetComponentInChildren<>()因为从层次结构中可以看出它有很多孩子和子孩子。

标签: c#unity3dmrtktextmeshpro

解决方案


Transform.FindAPI

注意:Find 不会Transform 层次结构中执行递归下降。

这意味着:它只找到第一级的孩子!

您需要提供从第一个直接孩子开始的整个路径,例如

TextMeshProUGUI text1 = SlateInstant.transform.Find("Scroll View/Viewport/Content/GridLayout1/Column2/TextDebug").GetComponent<TextMeshProUGUI>();
text1.text = "This works";

更好的方法是在预制件的最顶层父(根)上有一个特定的控制器组件,并且有一个字段,例如

public class SlateController : MonoBehaviour
{
    public TextMeshProUGUI TextDebug;
}

并在预制编辑模式中将对象拖放TextDebug到检查器中的该插槽中。

然后简单地使用例如

SlateInstant.GetComponent<TheControllerClass>().TextDebug.text = "XYZ";

推荐阅读