Unity 之 UGUI Text组件介绍和简例
相关属性均可在Inspector面板上进行初始化设定,下面是在代码里设置每个属性
public void SetTextStyle()
{
#region ------ 【Charater】 ------
TiShi.fontSize = 15;
TiShi.fontStyle = FontStyle.Normal;
TiShi.lineSpacing = 1.2f;
TiShi.supportRichText = true;
#endregion
#region ------ 【Prargraph】 ------
TiShi.alignment = TextAnchor.LowerCenter;
TiShi.alignByGeometry = false;
TiShi.horizontalOverflow = HorizontalWrapMode.Overflow;
TiShi.verticalOverflow = VerticalWrapMode.Truncate;
TiShi.resizeTextForBestFit = true;
TiShi.resizeTextMinSize = 15;
TiShi.resizeTextMaxSize = 30;
#endregion
TiShi.color = new Color32(0, 0, 0, 0);
TiShi.material = Resources.Load("path", typeof(Material)) as Material;
TiShi.raycastTarget = false;
}
计时器Demo
public class Clock : MonoBehaviour
{
public Text clock;
int time;
public void StartClock(int time)
{
CancelInvoke("JiShi");
if (time == -1)
this.time = 15;
else
this.time = time;
JiShi();
}
void JiShi()
{
if (this.time >= 0)
{
clock.text = this.time.ToString();
this.time--;
Invoke("JiShi", 1f);
}
}
}
根据文本框长度设置文字大小自适应,相当于BestFit这个属性的功能,,,
区别在于:BestFit这个属性,在文本只有一行时能够按照我们想象的方式进行文本的字体的缩放,当我要显示的文本内容为多行时,【BestFit属性表现的则不尽如人意】当文本超出范围时,字体会缩小很多,以至于显示处理非常不好看,这时就需要自己写一个这样的方法:
void Start()
{
infoText.fontSize = CommonMethods.AdaptText(infoText, 36, 24);
}
public static int AdaptText(Text text, int sizeMax, int sizeMin)
{
string content = text.text;
float textWidth = text.GetComponent<RectTransform>().sizeDelta.x;
float textHeight = text.GetComponent<RectTransform>().sizeDelta.y;
float lineSpaceing = text.lineSpacing;
char[] contextArray = content.ToCharArray();
int oneCnt = 0;
int threeCnt = 0;
for (int i = 0; i < contextArray.Length; i++)
{
if (System.Text.Encoding.UTF8.GetBytes(contextArray[i].ToString()).Length == 1)
{
oneCnt++;
}
else
{
threeCnt++;
}
}
int allCount = threeCnt + (oneCnt % 2 == 0 ? oneCnt / 2 : oneCnt / 2 + 1);
for (int i = sizeMax; i > sizeMax - sizeMin; i--)
{
int lineCount = (int)(textWidth / i);
int line = allCount % lineCount == 0 ? allCount / lineCount : allCount / lineCount + 1;
if (line * i + (Convert.ToInt32((int)(i / 10)) + 1) + ((lineSpaceing - 1) / 0.1f * (Convert.ToInt32((int)(i / 10)) + 1) + (Convert.ToInt32((int)(i / 10)) + 1)) * (line - 1) <= textHeight)
{
return i;
}
}
return sizeMin;
}