如何从 instantiated/cloned 游戏对象获取 TextMeshProUGUI 组件?
How to get a TextMeshProUGUI component from an instantiated/cloned gameobject?
层次结构中的图片:
我实例化了 SlateUGUI 预制件,然后尝试访问 highlitged 游戏object 'TextDebug' 使用:
TextMeshProUGUI text1 = SlateInstant.transform.Find("TextDebug").GetComponent<TextMeshProUGUI>();
text1.text = "This works";
但是,它不起作用:
错误:NullReferenceException:Object 引用未设置为 object
的实例
我对使用GetComponentInChildren<>()
有点怀疑,因为从层次结构可以看出它是相当多的children和sub-children。
Note: Find does not perform a recursive descend down a Transform hierarchy.
这意味着:它只找到第一层 childs!
您需要提供从第一个直接 child 开始的完整路径,例如
TextMeshProUGUI text1 = SlateInstant.transform.Find("Scroll View/Viewport/Content/GridLayout1/Column2/TextDebug").GetComponent<TextMeshProUGUI>();
text1.text = "This works";
更好的方法是在预制件的最顶部 parent(根)放置一个特定的控制器组件,并且有一个字段,例如
public class SlateController : MonoBehaviour
{
public TextMeshProUGUI TextDebug;
}
并在预制件编辑模式下将 TextDebug
object 拖放到检查器中的那个插槽中。
然后简单地使用例如
SlateInstant.GetComponent<TheControllerClass>().TextDebug.text = "XYZ";
我认为一个简单的解决方案是向实例化对象添加一个标签,然后使用 FindWithTag
层次结构中的图片:
我实例化了 SlateUGUI 预制件,然后尝试访问 highlitged 游戏object 'TextDebug' 使用:
TextMeshProUGUI text1 = SlateInstant.transform.Find("TextDebug").GetComponent<TextMeshProUGUI>();
text1.text = "This works";
但是,它不起作用: 错误:NullReferenceException:Object 引用未设置为 object
的实例我对使用GetComponentInChildren<>()
有点怀疑,因为从层次结构可以看出它是相当多的children和sub-children。
Note: Find does not perform a recursive descend down a Transform hierarchy.
这意味着:它只找到第一层 childs!
您需要提供从第一个直接 child 开始的完整路径,例如
TextMeshProUGUI text1 = SlateInstant.transform.Find("Scroll View/Viewport/Content/GridLayout1/Column2/TextDebug").GetComponent<TextMeshProUGUI>();
text1.text = "This works";
更好的方法是在预制件的最顶部 parent(根)放置一个特定的控制器组件,并且有一个字段,例如
public class SlateController : MonoBehaviour
{
public TextMeshProUGUI TextDebug;
}
并在预制件编辑模式下将 TextDebug
object 拖放到检查器中的那个插槽中。
然后简单地使用例如
SlateInstant.GetComponent<TheControllerClass>().TextDebug.text = "XYZ";
我认为一个简单的解决方案是向实例化对象添加一个标签,然后使用 FindWithTag