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++;
    }
}

補充

如果有誰知道具體原因,或有更好的解決方法,請留言,謝謝。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM