Unity 文本解决方案:富文本插件TextMeshPro

2023-10-14 15:30

本文主要是介绍Unity 文本解决方案:富文本插件TextMeshPro,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • TextMeshPro是Unity收购的一个第三方插件,现在已经自动内置到编辑器中,只要使用一次就会自动导入到工程。
  • TextMesh Pro是Unity的终极文本解决方案。它是Unity的UI Text和Text Mesh网格的完美替代品。
  • 功能强大,易于使用,TextMesh Pro使用先进的文本渲染技术,以及一套自定义着色器;提供实质性的视觉质量改进,同时给用户提供难以置信的灵活性,当涉及到文本样式和纹理。
  • TextMesh Pro提供了对文本格式和布局的改进控制,具有诸如字符、单词、行和段落间距、字距、对齐文本、链接、30多个可用的富文本标记、支持多种字体和精灵、自定义样式等功能。
  • 由于TextMesh Pro创建的几何图形和Unity的文本组件一样,每个字符使用两个三角形,所以这种改进的视觉质量和灵活性并不需要额外的性能成本。
  • 优化桌面和移动设备,TextMesh Pro带来了最先进的文本渲染统一

组件介绍:

Main Setting:
Font Asset:TMP的字体资源。
Materail Preset:字体用到的材质
Font Style:字体风格,粗体,斜体,下划线等等
Auto Size:自动适应大小(和Text一样)
Vertex Color:字体颜色
Color Gradient:勾选之后会出现渐变色的控制参数
Override Tags:勾选之后富文本的<color>标签会失效
Spacing Options:字体、单词、行、段落间距。单词的判定依据是空格,段落的判定依据是换行。
Alignment:对齐方式
Wrapping:是否自动折行
Overflow:溢出方式
    Overflow:可以溢出

    Ellipsis:超出时将超出部分用...替代

    Truncate:无法溢出

    Page:将文本内容分成很多页可以通过切换页签id来切换内容

    Linked:可以关联一个其他的TMP组件多余部分将显示在新的组件里面(实际测了下没有起效果)

    Masking:不明

    ScrollRect:不明

Extra Setting:
Margins:上下左右边界调整
Geometry Sorting:不明
RichText:是否支持父文本
Raycast Target:是否支持UI事件响应
Parse Escape Characters:是否解析转义字符
Visible Descender:不明
Sprite Asset:关联的表情资源文件(如果没有设置,在使用图文混编的时候会自动启用系统默认的表情资源)
Kerning:是否开启自动紧缩。有些字母排列在一起的时候会显得比较空如T e,开启后会显示为Te。
Extra padding:官方文档说的是某些比较小的字体在排版时可能被裁剪掉,开启该选项可以防止这个现象。目前没有遇到过这个情况,如果以后遇到了就开启试试吧。
轮廓、阴影、外发光:
以上这些特性由shader实现,所以使用这些特性需要通过调整材质面板对应的参数

轮廓:

 

outline:外轮廓参数,其中:【Color】是轮廓颜色。【Thickness】决定了外轮廓的厚度。【Texture】则会将texture的纹理采样之后和color混合输出最终颜色,这里的texture应该设置为repeat模式。因为speed参数可以使得外轮廓有一个uv流动的效果,可以用来做流动的外轮廓,如果用clamp就没有流动效果了。
Face:控制内部的表现(外轮廓以内的字体部分),和outline联合使用,其中:【Color】是内部颜色,该颜色会合字体顶点色(组件面板的Vertex Color)叠加在一起作为最终字体的颜色。【Softness】是会控制外轮廓的柔和程度。【Dilate】控制的是内部区域的大小。texture同outline,不过纹理会叠加到内部区域。
阴影:

 

轮廓参数中有一个勾选框,可以开启和禁用该特性。
【Color】阴影颜色,【Offset】阴影的偏移量,【Dilate】影响阴影大小,【Softness】柔和程度。
外发光:

 

【Color】外发光颜色,【Offset】内外交界处的偏移为整数则沿法线向外偏移,【Inner】外发光向内部扩散的距离,【Outer】外发光向外部扩散的距离,【Power】强度。
表情混编使用:
      我们平时开发游戏的时候经常会遇到图文并列的情况。比如一个上商店界面,需要在购买按钮上展示消耗的货币图标和数量。一般处理的时候都是做两个预制件,一个处理图片,一个处理文字,在用布局组件控制排版。比较繁琐。。。

      有了TMP的混编功能只需要一个TMP组件加一个带富文本的字符串就可以实现功能了。如string costtxt = string.format("<sprite=index> X {0}", costnum)。极大的简化了工作量,像一些图文混编的聊天功能也可以用TMP组件轻松的实现。ps:其中index是关联的表情资源(Extra Setting里的Sprite Asset)的序号(这个可以看表情制作这块)。

下面是一个使用的参考:

 

表情资源制作:
1.导入需要用于制作表情的图片到unity中,将Sprite Mode设置为Multiple。

2.点击sprite Editor将每一个表情分割出来。(图是百度随便扒的)


 

为了使文字和图片对齐,中心点设置为左下。
3.保存退出sprite编辑界面,右键选中处理好的图片,依次选Create->TextMeshPro->Sprite Asset即可生成Sprite Asset。

4.将生成好的Sprite Asset拖到TMP组件中使用。

 

5.编写富文本

 

6.最终效果

 

中文字体制作:
字体资源的制作有很多种方式,这里只介绍一种添加中文支持的方式(因为我在自己的项目中只用了这一种 ^-^! )。

1.在window->TextMeshPro里面打开Font Asset Creator

 

Source Font File中添加支持中文的字库
Character Set 设置为Custom Characters(自定义字符集)
Custom Character List中添加需要用到的中文字符,点击保存就得到支持中文的TMP字体了。
***这里有一个内存优化点

Atlas Resolution 决定了生成字体图片的大小

Samping Point Size 可以设置为自动尺寸和自定义尺寸两种模式

如果设置为自动尺寸则生成的单个字符会自动缩放以占满整个图片

如果设置为自定义尺寸则可以指定游戏中使用最多的那个尺寸大小,然后根据最终所有字符占用的尺寸大小来调整Atlas Resolution,以避免占用多余的内存。

关于性能:
关于性能有两个点可能要注意一下。

1.使用图文混编图片和文字会分别占用一个dc(因为二者使用的材质信息不同)。因此TMP中混编的图片同样要注意不要和字体发生重叠,否则就会打断文本自身的合并处理增加dc。如果有重叠的时候就将带图片的放在上层(貌似同一个组件中图片的层级会默认比文字高),这样文字和文字之间dc仍然是合并的。

2.TMP组件支持的外发光,光照,阴影这些特性都是在shader中实现的,如果全开的话势必会增加渲染的开销。建议根据项目情况去选择不同的shader来生成字体,比如插件自己提供的mobile里的shader(mobile里的shader不仅仅是删除了部分功能如光照外发光,本身对外轮廓,阴影的算法也做了简化)。如果使用需求明确的话,也可以根据需求去裁减修改插件提供的shader。总之够用就行。
——————— 

引用:  

https://zhuanlan.zhihu.com/p/84700094

 

 

 

这篇关于Unity 文本解决方案:富文本插件TextMeshPro的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/211396

相关文章

js异步提交form表单的解决方案

1.定义异步提交表单的方法 (通用方法) /*** 异步提交form表单* @param options {form:form表单元素,success:执行成功后处理函数}* <span style="color:#ff0000;"><strong>@注意 后台接收参数要解码否则中文会导致乱码 如:URLDecoder.decode(param,"UTF-8")</strong></span>

Maven(插件配置和生命周期的绑定)

1.这篇文章很好,介绍的maven插件的。 2.maven的source插件为例,可以把源代码打成包。 Goals Overview就可以查看该插件下面所有的目标。 这里我们要使用的是source:jar-no-fork。 3.查看source插件的example,然后配置到riil-collect.xml中。  <build>   <plugins>    <pl

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

Jenkins 插件 地址证书报错问题解决思路

问题提示摘要: SunCertPathBuilderException: unable to find valid certification path to requested target...... 网上很多的解决方式是更新站点的地址,我这里修改了一个日本的地址(清华镜像也好),其实发现是解决不了上述的报错问题的,其实,最终拉去插件的时候,会提示证书的问题,几经周折找到了其中一遍博文

明明的随机数处理问题分析与解决方案

明明的随机数处理问题分析与解决方案 引言问题描述解决方案数据结构设计具体步骤伪代码C语言实现详细解释读取输入去重操作排序操作输出结果复杂度分析 引言 明明生成了N个1到500之间的随机整数,我们需要对这些整数进行处理,删去重复的数字,然后进行排序并输出结果。本文将详细讲解如何通过算法、数据结构以及C语言来解决这个问题。我们将会使用数组和哈希表来实现去重操作,再利用排序算法对结果

UE5 半透明阴影 快速解决方案

Step 1: 打开该选项 Step 2: 将半透明材质给到模型后,设置光照的Shadow Resolution Scale,越大,阴影的效果越好

Level3 — PART 3 — 自然语言处理与文本分析

目录 自然语言处理概要 分词与词性标注 N-Gram 分词 分词及词性标注的难点 法则式分词法 全切分 FMM和BMM Bi-direction MM 优缺点 统计式分词法 N-Gram概率模型 HMM概率模型 词性标注(Part-of-Speech Tagging) HMM 文本挖掘概要 信息检索(Information Retrieval) 全文扫描 关键词

MySQL主从同步延迟原理及解决方案

概述 MySQL的主从同步是一个很成熟的架构,优点为: ①在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力; ②在从主服务器进行备份,避免备份期间影响主服务器服务; ③当主服务器出现问题时,可以切换到从服务器。 相信大家对于这些好处已经非常了解了,在项目的部署中也采用这种方案。但是MySQL的主从同步一直有从库延迟的问题,那么为什么会有这种问题。这种问题如何解决呢? MyS

eclipse安装subversion(SVN)版本控制插件

陈科肇 查看插件更新站点 网址:http://subclipse.tigris.org/servlets/ProjectProcess?pageID=p4wYuA 网站截图: 根据自己的eclipse版本,选择需要的更新站点. 使用eclipse集成subservion插件 Help > Install New Software…> 等待下载安装插件…

Weex入门教程之2,Android Studio安装Weex插件

插件位置及描述 https://plugins.jetbrains.com/idea/plugin/8460-weex 貌似对windows还不是很支持,先放着吧。 安装 插件功能 先预览下都有什么功能 安装完成Weex插件后,如果在main toolbar找不到这些功能图标,那么就需要手动添加到main toolbar 添加到main toolbar 红框内就是