「这是我参与2022首次更文挑战的第23天,活动详情查看:2022首次更文挑战」
Unity 之 UGUI Text组件介绍和简例
相关属性均可在Inspector面板上进行初始化设定,下面是在代码里设置每个属性
public void SetTextStyle()
{
#region ------ 【Charater】 ------
//字体大小
TiShi.fontSize = 15;
//文字格式正常,斜体,粗斜,加粗
TiShi.fontStyle = FontStyle.Normal;//.Italic.BoldAndItalic.Bold;
//行间距
TiShi.lineSpacing = 1.2f;
//是否支持富文本
TiShi.supportRichText = true;
#endregion
#region ------ 【Prargraph】 ------
//对齐方式 各种TextAnchor枚举对齐
TiShi.alignment = TextAnchor.LowerCenter;
//使用字形几何范围来执行水平对齐,而不是使用音质度量。
TiShi.alignByGeometry = false;
//水平竖直模式 ==》 Overflow:溢出模式【不考虑文本的width或者height的限制,显示全部文本内容】
//Wrap 或者 Truncate 在文本width或者height区域内显示,超出部分被隐藏【包括字体大小超出】
TiShi.horizontalOverflow = HorizontalWrapMode.Overflow;
TiShi.verticalOverflow = VerticalWrapMode.Truncate;
//应该允许文本自动调整大小。
TiShi.resizeTextForBestFit = true;
//设置 BestFit 为True后
//当前文本区域显示不开后,内容会自动缩小字号; 【最大:30 最小:15】
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
/// <summary>
/// 倒计时
/// </summary>
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()
{
//Debug.Log(this.time.ToString());
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);
}
/// <summary>
/// 文本框根据文字长度自适应,返回文字大小
/// </summary>
/// <param name="text">文本组件</param>
/// <param name="sizeMax">字号最大值</param>
/// <param name="sizeMin">字号最小值</param>
/// <returns></returns>
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++)
{
// Debug.Log(contextArray[i]+" "+System.Text.Encoding.UTF8.GetBytes(contextArray[i].ToString()).Length);
if (System.Text.Encoding.UTF8.GetBytes(contextArray[i].ToString()).Length == 1)
{
oneCnt++;
}
else
{
threeCnt++;
}
}
// Debug.Log("文本长度:"+System.Text.Encoding.UTF8.GetBytes(content).Length);
int allCount = threeCnt + (oneCnt % 2 == 0 ? oneCnt / 2 : oneCnt / 2 + 1);
// Debug.Log(allCount+" "+sizeMax+" "+sizeMin);
for (int i = sizeMax; i > sizeMax - sizeMin; i--)
{
// Debug.Log("----------------"+i+"-------------------");
int lineCount = (int)(textWidth / i);
// Debug.Log(lineCount);
int line = allCount % lineCount == 0 ? allCount / lineCount : allCount / lineCount + 1;
// Debug.Log(line);
// Debug.Log("----------------"+i+"-------------------");
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;
}