您当前的位置: 首页 >  unity
  • 10浏览

    0关注

    193博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Unity实现Text BestFit文本超框时再缩小字体

我寄人间雪满头丶 发布时间:2022-09-27 11:22:10 ,浏览量:10

前言

因为要做多语言自适应功能,但是Unity自带的BestFit超过一行后就会自动缩小字体,想要的效果是文本满框后再缩小字体,所以需要重写OnPopulateMesh绘制部分。

代码
using UnityEngine.UI;
using UnityEngine;
using System.Collections.Generic;

public class NewText : Text
{
        #region 实现超框时再缩小字体,适配多语言
        /// 
        /// 当前可见的文字行数
        /// 
        public int VisibleLines { get; private set; }

        private void _UseFitSettings()
        {
            TextGenerationSettings settings = GetGenerationSettings(rectTransform.rect.size);
            settings.resizeTextForBestFit = false;

            if (!resizeTextForBestFit)
            {
                cachedTextGenerator.PopulateWithErrors(text, settings, gameObject);
                return;
            }

            int minSize = resizeTextMinSize;
            int txtLen = text.Length;
            for (int i = resizeTextMaxSize; i >= minSize; --i)
            {
                settings.fontSize = i;
                cachedTextGenerator.PopulateWithErrors(text, settings, gameObject);
                if (cachedTextGenerator.characterCountVisible == txtLen) break;
            }
        }

        private readonly UIVertex[] _tmpVerts = new UIVertex[4];
        protected override void OnPopulateMesh(VertexHelper toFill)
        {
            if (null == font) return;

            m_DisableFontTextureRebuiltCallback = true;
            _UseFitSettings();

            // Apply the offset to the vertices
            IList verts = cachedTextGenerator.verts;
            float unitsPerPixel = 1 / pixelsPerUnit;
            int vertCount = verts.Count;

            // We have no verts to process just return (case 1037923)
            if (vertCount             
关注
打赏
1648518768
查看更多评论
0.2305s