前言

因为要做多语言自适应功能,但是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文本超框时再缩小字体相关推荐

  1. 鸿蒙应用开发 | 文本框(Text)和编辑框(TextField)的功能与用法

    大家好,我是你们的朋友 朋哥,今天开始朋哥开始研究鸿蒙了,定时会写一些文章分享给大家,希望多多提意见. 上一篇原创文章 解读了 鸿蒙开发布局的 自定义布局,也是为了总结一下几种布局的使用,里面牵涉到几 ...

  2. 【100个 Unity踩坑小知识点】 | Unity中Text文本框 和 InputField文本输入框 内容换行问题

    Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 . 包括游戏开发.美术.建筑.汽车设计.影视在内的所有创作者,借助 Unity 将创意 ...

  3. Unity Text文字超框,末尾显示‘...’省略号

    参考博客Unity 实现文字过长显示省略号, // 超框显示...public static void SetTextWithEllipsis(this Text textComponent, str ...

  4. Unity 3D - UGUI 自适应文本框

    Unity 3D - UGUI 自适应文本框 : 说明 : 同一个文本框根据内容 , 自动缩放文本框大小 . 效果图 : 实现方式 ( 重点 ) : 第一步 : 创建一个文本( Text ) , 文本 ...

  5. Unity Text 实现文本上下标功能

    Unity Text 实现文本上下标功能 可修改上下标颜色以及大小 说明: 文本:1[1=上标1(ce)]2[2=下标2($%6)]3[1|30=上标3{^&}]4[2|30=下标4]5[1| ...

  6. Unity Text富文本(文本变得多姿多彩)

    Unity Text富文本(文本变得多姿多彩) 实例: 步骤如下: 1.创建一个UI Text 2.Text组件中的Rich Text要勾选上 3.写内容 html控制代码 实例: 步骤如下: 1.创 ...

  7. 嵌入式GUI LVGL『Text Area文本区域控件』介绍

    一. LVGL GUI文本区域控件的概念 文本区域是一个带有标签和光标的页面.文本或字符可以添加到它.长行被换行,当文本足够长时,可以滚动文本区域. 二. LVGL GUI文本区域小部件和样式 文本区 ...

  8. 层遇到select框时[收藏]

    作者:fason 当层遇到下拉框时总是挡不了select框?其实这是IE的BUG,其它的浏览器没有这个问题,对于这个问题论坛里不少提出,在这里提供我的几种方法,各有各的好处,有错,有好的意见者提出,谢 ...

  9. 【游戏开发实战】Unity UGUI Text图文混排(聊天文字混表情),支持动态表情,出招吧表情帝

    文章目录 一.前言 二.最终效果 三.具体使用 1.导入表情素材 2.设置图片格式 3.生成表情图集 4.UI-EmojiFont.shader 5.材质球 四.测试 五.结束语 一.前言 点关注不迷 ...

  10. 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文件, ...

最新文章

  1. 2021年春季学期-信号与系统-第十一次作业参考答案-第二小题
  2. Material Designer的低版本兼容实现(五)—— ActivityOptionsCompat
  3. sklearn快速入门教程:补充内容 -- sklearn模型评价指标汇总(聚类、分类、回归)
  4. bzoj2049 [Sdoi2008]Cave 洞穴勘测
  5. 在Vid4上突破28dB大关!视频超分新的里程碑:IconVSR
  6. 【开发环境】 irun(ncverilog)无法dump fsdb波形问题解决方法
  7. Flask Swagger 文档自动生成
  8. 数据库系统工程师考试的考点是哪些?
  9. UG NX二次开发(C#)-分析-测量体对象的体积
  10. AWS云lamda实时判断IoTCore上传的数据并插入RDS中
  11. 如何让右下角时间显秒
  12. 理解类8583报文协议
  13. 【转】dB的计算方法
  14. 渗透中常用的在线工具和网站总结
  15. SQL常用脚本整理,建议收藏
  16. 易语言 如何调用麦谈帮API接口?
  17. 1天1瓶啤酒 大脑衰老2年
  18. 优秀的LOGO设计都有哪些共同点,是需要我们借鉴的?
  19. 第七十一篇:从ADAS到自动驾驶(四):车辆检测
  20. 腾讯游戏云以科技连接游戏未来,全力打造行业新生态

热门文章

  1. ASP.NET+Sql Server 2008 +highchart控件从数据库中获取数据生成饼状图柱状图
  2. MySQL之按日期查询表数据
  3. 【数据库原理及应用教程(第4版|微课版)陈志泊】【第一章习题】
  4. 保付代理和供应链金融业务大纲
  5. 诺顿杀毒软件22010最新注册码
  6. index函数python什么意思_详解python中的index函数用法
  7. shader篇-阴影
  8. 踏歌黑名单工具类DEMO(AUB)
  9. 微服务架构 | 怎样解决超大附件分片上传?
  10. Navicat模糊查询表