Unity 之 UGUI Text组件介绍和简例

Unity 之 UGUI Text组件介绍和简例

texture

相关属性均可在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;
    }


相关链接:文字的渐变色和描边

发布了446 篇原创文章 · 获赞 630 · 访问量 50万+

猜你喜欢

转载自blog.csdn.net/Czhenya/article/details/103301218