c# - 如何从实例化/克隆的游戏对象中获取 TextMeshProUGUI 组件?
问题描述
来自层次结构的图片:
我实例化了 SlateUGUI 预制件,然后尝试使用以下命令访问突出显示的游戏对象“TextDebug”:
TextMeshProUGUI text1 = SlateInstant.transform.Find("TextDebug").GetComponent<TextMeshProUGUI>();
text1.text = "This works";
但是,它不起作用:错误:NullReferenceException:对象引用未设置为对象的实例
我对使用有点怀疑,GetComponentInChildren<>()
因为从层次结构中可以看出它有很多孩子和子孩子。
解决方案
注意: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";
推荐阅读
- python - Python:在函数中存储变量并根据条件重新启动时间
- javascript - 将JSON数组传递给云函数节点js
- reactjs - React Route - 点击时检查用户是否登录,如果没有,让他登录然后返回页面
- python - ULMFiT 如何进行初始词嵌入?
- amazon-web-services - 无法写入 AWS Timestream 表 ResourceNotFound 异常
- reactjs - React:useState 挂钩仅更新来自同一功能组件的多个实例的最后一个实例
- python - 来自 QFormLayout 的输入打印为空
- travis-ci - Travis CI 与 Heroku 集成,将密钥设置为 env
- julia - 为什么在 Julia 中有许多不同的方法来调度抽象类型?它们之间有什么区别?
- scheme - 没有直接映射的方案组合?