本文會爲大家介紹關於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;
}