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++;
}
}
補充
如果有誰知道具體原因,或有更好的解決方法,請留言,謝謝。