unity - 从child中获取TextMeshPro以及设置text
unity - 从child中获取TextMeshPro以及设置text
问题一、无法直接调用GetComponentInChildren
从孙子后代的gameobject
中获取TextMeshPro
组件。具体原因未知。
通常情况下GetComponentInChildren能够自行进行深度遍历查找(如:https://blog.csdn.net/qq_39108767/article/details/101757494中介绍的),不知道为什么此时不行。
解决方法:
通过显式的深度优先遍历,获取对应的TextMeshPro组件,具体代码类似如下:
private T GetComponentInChildrenExt<T>(Transform trans) where T : class
{
if (trans == null)
{
return default(T);
}
var component = trans.gameObject.GetComponentInChildren<T>();
if (component != null)
{
return component;
}
for (int i = 0; i < trans.childCount; i++)
{
component = GetComponentInChildrenExt<T>(trans.GetChild(i));
if (component != null)
{
return component;
}
}
return default(T);
}
问题二、在Start中通过下面的方式设置TextMeshPro的text属性无效
private TextMeshPro _textMesh;
void Start()
{
_textMesh = GetComponentInChildrenExt<TextMeshPro>(transform);
_textMesh.text = "any other text";
}
解决办法:
尝试后发现,需要在update中多次设置text:
private int _textSetMaxCount = 3; // 具体次数尝试后确定
private int _textSetCount = 0;
private void Update()
{
if (_textSetCount < _textSetMaxCount)
{
_textMesh.text = "any other text";
_textSetCount++;
}
}
补充
如果有谁知道具体原因,或有更好的解决方法,请留言,谢谢。
版权说明
作者: grassofsky
出处: http://www.cnblogs.com/grass-and-moon
本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 可邮件(grass-of-sky@163.com)咨询.
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步