【问题标题】:How to get a TextMeshProUGUI component from an instantiated/cloned gameobject?如何从实例化/克隆的游戏对象中获取 TextMeshProUGUI 组件?
【发布时间】:2021-11-20 11:42:53
【问题描述】:

来自 Hierarchy 的图片:

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

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

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

我对使用GetComponentInChildren&lt;&gt;() 有点怀疑,因为从层次结构中可以看出它有很多子子项。

【问题讨论】:

    标签: c# unity3d mrtk textmeshpro


    【解决方案1】:

    来自Transform.Find API

    注意:Find 执行递归向下变换层次结构。

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

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

    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";
    

    【讨论】:

      【解决方案2】:

      我认为一个简单的解决方案是为实例化对象添加一个标签,然后使用FindWithTag

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-14
        • 1970-01-01
        相关资源
        最近更新 更多