Unity实现Text BestFit文本超框时再缩小字体
前言
因为要做多语言自适应功能,但是Unity自带的BestFit超过一行后就会自动缩小字体,想要的效果是文本满框后再缩小字体,所以需要重写OnPopulateMesh绘制部分。
代码
using UnityEngine.UI;
using UnityEngine;
using System.Collections.Generic;public class NewText : Text
{#region 实现超框时再缩小字体,适配多语言/// <summary>/// 当前可见的文字行数/// </summary>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 verticesIList<UIVertex> verts = cachedTextGenerator.verts;float unitsPerPixel = 1 / pixelsPerUnit;int vertCount = verts.Count;// We have no verts to process just return (case 1037923)if (vertCount <= 0){toFill.Clear();return;}Vector2 roundingOffset = new Vector2(verts[0].position.x, verts[0].position.y) * unitsPerPixel;roundingOffset = PixelAdjustPoint(roundingOffset) - roundingOffset;toFill.Clear();if (roundingOffset != Vector2.zero){for (int i = 0; i < vertCount; ++i){int tempVertsIndex = i & 3;_tmpVerts[tempVertsIndex] = verts[i];_tmpVerts[tempVertsIndex].position *= unitsPerPixel;_tmpVerts[tempVertsIndex].position.x += roundingOffset.x;_tmpVerts[tempVertsIndex].position.y += roundingOffset.y;if (tempVertsIndex == 3)toFill.AddUIVertexQuad(_tmpVerts);}}else{for (int i = 0; i < vertCount; ++i){int tempVertsIndex = i & 3;_tmpVerts[tempVertsIndex] = verts[i];_tmpVerts[tempVertsIndex].position *= unitsPerPixel;if (tempVertsIndex == 3)toFill.AddUIVertexQuad(_tmpVerts);}}m_DisableFontTextureRebuiltCallback = false;VisibleLines = cachedTextGenerator.lineCount;}#endregion
}
勾选BestFit即可。
Unity实现Text BestFit文本超框时再缩小字体相关推荐
- 鸿蒙应用开发 | 文本框(Text)和编辑框(TextField)的功能与用法
大家好,我是你们的朋友 朋哥,今天开始朋哥开始研究鸿蒙了,定时会写一些文章分享给大家,希望多多提意见. 上一篇原创文章 解读了 鸿蒙开发布局的 自定义布局,也是为了总结一下几种布局的使用,里面牵涉到几 ...
- 【100个 Unity踩坑小知识点】 | Unity中Text文本框 和 InputField文本输入框 内容换行问题
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 . 包括游戏开发.美术.建筑.汽车设计.影视在内的所有创作者,借助 Unity 将创意 ...
- Unity Text文字超框,末尾显示‘...’省略号
参考博客Unity 实现文字过长显示省略号, // 超框显示...public static void SetTextWithEllipsis(this Text textComponent, str ...
- Unity 3D - UGUI 自适应文本框
Unity 3D - UGUI 自适应文本框 : 说明 : 同一个文本框根据内容 , 自动缩放文本框大小 . 效果图 : 实现方式 ( 重点 ) : 第一步 : 创建一个文本( Text ) , 文本 ...
- Unity Text 实现文本上下标功能
Unity Text 实现文本上下标功能 可修改上下标颜色以及大小 说明: 文本:1[1=上标1(ce)]2[2=下标2($%6)]3[1|30=上标3{^&}]4[2|30=下标4]5[1| ...
- Unity Text富文本(文本变得多姿多彩)
Unity Text富文本(文本变得多姿多彩) 实例: 步骤如下: 1.创建一个UI Text 2.Text组件中的Rich Text要勾选上 3.写内容 html控制代码 实例: 步骤如下: 1.创 ...
- 嵌入式GUI LVGL『Text Area文本区域控件』介绍
一. LVGL GUI文本区域控件的概念 文本区域是一个带有标签和光标的页面.文本或字符可以添加到它.长行被换行,当文本足够长时,可以滚动文本区域. 二. LVGL GUI文本区域小部件和样式 文本区 ...
- 层遇到select框时[收藏]
作者:fason 当层遇到下拉框时总是挡不了select框?其实这是IE的BUG,其它的浏览器没有这个问题,对于这个问题论坛里不少提出,在这里提供我的几种方法,各有各的好处,有错,有好的意见者提出,谢 ...
- 【游戏开发实战】Unity UGUI Text图文混排(聊天文字混表情),支持动态表情,出招吧表情帝
文章目录 一.前言 二.最终效果 三.具体使用 1.导入表情素材 2.设置图片格式 3.生成表情图集 4.UI-EmojiFont.shader 5.材质球 四.测试 五.结束语 一.前言 点关注不迷 ...
- xml 转换 --倾斜文本矩形框 (cx,cy,w,h,ang)到四个角坐标点(x1,y1,x2,y2,x3,y3,x4,y4)
程序实现了由倾斜文本矩形框 (cx,cy,w,h,ang)到四个角坐标点(x1,y1,x2,y2,x3,y3,x4,y4)的转换 ,由于现有xml格式不符合voc格式要求 ,故先读取读取.xml文件, ...
最新文章
- 2021年春季学期-信号与系统-第十一次作业参考答案-第二小题
- Material Designer的低版本兼容实现(五)—— ActivityOptionsCompat
- sklearn快速入门教程:补充内容 -- sklearn模型评价指标汇总(聚类、分类、回归)
- bzoj2049 [Sdoi2008]Cave 洞穴勘测
- 在Vid4上突破28dB大关!视频超分新的里程碑:IconVSR
- 【开发环境】 irun(ncverilog)无法dump fsdb波形问题解决方法
- Flask Swagger 文档自动生成
- 数据库系统工程师考试的考点是哪些?
- UG NX二次开发(C#)-分析-测量体对象的体积
- AWS云lamda实时判断IoTCore上传的数据并插入RDS中
- 如何让右下角时间显秒
- 理解类8583报文协议
- 【转】dB的计算方法
- 渗透中常用的在线工具和网站总结
- SQL常用脚本整理,建议收藏
- 易语言 如何调用麦谈帮API接口?
- 1天1瓶啤酒 大脑衰老2年
- 优秀的LOGO设计都有哪些共同点,是需要我们借鉴的?
- 第七十一篇:从ADAS到自动驾驶(四):车辆检测
- 腾讯游戏云以科技连接游戏未来,全力打造行业新生态