unity UI隨着文字長度改變UGUI text的長度 C#獲取字符串的英文長度。

本文會爲大家介紹關於UGUI的使用中,經常會用到的UI框的長度要隨着文本長度變化的功能。

首先說下我的做法:

我製作了一個帶有底色背景的文本框,類似途中這樣的結構。

info是一個image

infotext是一個文本框

將infotext的stretch固定。爲四個點做錨點是爲了上下左右都會改變的情況

下文只會介紹左右的例子,上下框改變同理計算即可得到。

下面貼出代碼字段。設定參數值可以計算得到,也可以使用代碼獲取當前物體的,此處不做過多解釋。

有任何問題直接留言,看到會回覆 QQ羣 207019099 備註“UGUI Text 改變”


 /// <summary>
    /// 章節顯示UI跟隨物體移動顯示
    /// </summary>
    public void ChapterUITips(string info)
    {
        //獲取獲取字符串的英文長度
        int length = GetStringLength(info);

        //14爲起始寬度 + 10*length 爲一個字體18號字節所佔爲10,長度length爲英文字符的長度
        //float width = 14 + 10 * length;
        float width = 10 + 18 * length;
        chapterTipsinfo.sizeDelta = new Vector2(width,60);
        //100爲起始位置 + length * 8.7f 爲一個字體18號字節,寬度位置需要向後平移8.7f(上面寬度會像兩側增加,所以這裏正常應爲9但是根據實際情況爲8.7f),長度length爲英文字符的長度
        chapterTipsinfo.localPosition = new Vector3(100 + length * 8.7f, chapterTipsinfo.localPosition.y, chapterTipsinfo.localPosition.z);

        chapterTipsText.text = info;

    }

 /// <summary>
    /// 獲取字符串的英文長度
    /// </summary>
    /// <param name="str"></param>
    /// <returns></returns>
    public static int GetStringLength(string str)
    {
        ASCIIEncoding ascii = new ASCIIEncoding();
        int tempLen = 0;
        byte[] s = ascii.GetBytes(str);
        for (int i = 0; i < s.Length; i++)
        {
            if ((int)s[i] == 63)
            {
                tempLen += 2;
            }
            else
            {
                tempLen += 1;
            }
        }
        return tempLen;
    }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章