Unity TextMesh Pro入门

devtools/2025/1/15 19:09:25/

概述

TextMesh Pro是Unity提供的一组工具,用于创建2D和3D文本。与Unity的UI文本和Text Mesh系统相比,TextMesh Pro提供了更好的文本格式控制和布局管理功能。

本文介绍了TMP_Text组件和Tmp字体资产(如何创建字体资产和如何解决缺字问题),还有一些高级功能可能在以后的时候完善.

参考文章:Unity TextMeshPro的字体消失的问题_unity 字体不显示-CSDN博客


主要优势

  • 文本格式控制:包括字符、单词、行和段落的间距控制。
  • 字距调整(Kerning)
  • 文本对齐:支持文本的对齐(包括两端对齐)。
  • 超链接:支持文本中的链接。
  • 丰富的文本标签:提供超过30种富文本标签。
  • 多字体支持:可使用多个字体样式。
  • 精灵支持:可以在文本中嵌入精灵。
  • 自定义样式:支持创建和应用自定义文本样式。
  • 高级文本渲染:通过自定义着色器实现更加精细的文本渲染。

开始使用

TextMesh Pro包已经包含在Unity编辑器中,因此无需单独安装。你可以通过Package窗口切换到不同版本的TextMesh Pro。
要开始使用TextMesh Pro,首先需要导入TMP Essential Resources包,这可以在后续步骤中完成。

导入所需资源

  1. 从Unity菜单选择 Window > TextMeshPro > Import TMP Essential Resources。
  2. 这会将必要的资源添加到项目的TextMesh Pro文件夹中。

导入示例和附加资源

TextMesh Pro还包括一些示例和附加资源,有助于学习其各种功能。

  1. 从Unity菜单选择 Window > TextMeshPro > Import TMP Examples & Extras。
  2. 这会将示例和附加资源添加到项目的 TextMesh Pro > Examples & Extras 文件夹中。

或者直接创建一个UI.

如果没有导入资源那么会弹出一个对话框.第一个按钮代表导入基本资源,导入后可以选择关闭该对话框,这是使用TextMesh Pro所必须得,第二个按钮是一些示例和素材,这不是必须的.

导入后一个目录会出现在Assets,如果点击了第二个按钮那么该目录还会额外多出一个示例目录.

老版本UI的Text跑到了这里


创建文本

在场景中创建文本,可以添加TextMesh Pro的GameObject。有两种类型的TextMesh Pro GameObject:

  1. TextMesh Pro UI Text GameObject:使用Unity的UI系统,为Canvas上的文本设计。

  2. TextMesh Pro 3D Text GameObject:像普通的3D GameObject一样在场景中显示。

TextMesh Pro UI Text GameObjects

TextMesh Pro UI文本对象使用Unity的UI系统,依赖Canvas。

创建TextMesh Pro UI Text GameObject:

  1. 从菜单中选择 GameObject > UI > TextMesh Pro - Text。

  2. 在TextMesh Pro (UGUI) Inspector面板中输入文本内容。

  3. 根据需要调整UI文本的属性。

TextMesh Pro 3D Text GameObjects

TextMesh Pro 3D文本对象与UI文本对象非常相似,但不像UI对象那样依赖于Canvas,而是作为普通的3D对象出现在场景中。

创建TextMesh Pro 3D Text GameObject:

  1. 从菜单中选择 GameObject > 3D GameObject > TextMesh Pro - Text。

  2. 在TextMesh Pro Inspector面板中输入文本内容。

  3. 根据需要调整3D文本的属性。


UI Text GameObjects

默认情况下,TextMesh Pro UI文本对象具有以下组件:

  1. Rect Transform
    控制GameObject在Canvas上的位置和大小。

  2. Canvas Renderer
    渲染GameObject在Canvas上的显示。

  3. TextMesh Pro UGUI (脚本)
    包含要显示的文本以及控制文本外观和行为的属性。以下是这些属性的详细说明:

  4. Material
    一个Unity材质,使用TextMesh Pro着色器来进一步控制文本的外观。更多信息,请参阅Shaders部分。

重点看下组件本身

主要设置属性与功能

属性功能
A. Text输入要显示的文本,以及任何富文本标记。
B. Font指定使用的字体,以及基本字体属性(如字体大小、样式等)。
C. Color定义文本的基础颜色或颜色渐变。
D. Spacing控制字符、单词、行和段落之间的间距。
E. Alignment控制文本的水平和垂直对齐方式。
F. Wrapping and Overflow控制单词换行,并定义当文本超出显示区域时的处理方式。
G. UV Mapping控制如何将纹理映射到文本的面和轮廓上。
H. Extra Settings提供额外的选项来控制文本的外观和行为。

文本部分

文本部分是输入要显示的文本,并可选择使用富文本标记进行自定义。

属性与功能

  • Text
    输入要显示的文本。

  • Enable RTL Editor
    启用此选项以使文本从右至左显示,而不是从左至右。

    启用后,Inspector面板会显示一个额外的输入字段,您可以查看并直接编辑反向文本。
    文本会在显示或渲染之前被反转。

主要设置

包含定义文本基本外观所需的属性。通过更改或编辑材质进一步自定义文本的外观。

字体设置面板是选择文本字体并自定义字体样式的地方。

字体属性与功能

属性功能
Font Asset选择TextMesh Pro GameObject使用的字体资产。TextMesh Pro随附多个字体资产,您也可以从标准字体文件(如TrueType字体,ttf)创建其他字体。注:您可以在TextMesh Pro设置中为新文本对象设置默认字体资产。
Material Preset选择字体的材质。每个字体资产都有一个默认材质,但您也可以为其创建自定义材质。此预设列表包括所有名称中包含字体资产名称并使用相应字体图集纹理的材质。
Font Style启用标准文本样式选项。这些选项可以任意组合使用,除了大小写选项(小写、大写和小型大写),它们是互斥的。
B (Bold)加粗文本。加粗文本的外观由字体资产属性定义。
I (Italic)斜体文本。斜体文本的外观由字体资产属性定义。
U (Underline)为文本添加下划线。这会在基线下方渲染一条额外的线。
S (Strikethrough)为文本添加删除线。这会在基线上方渲染一条额外的线。
ab (Lowercase)在渲染之前将文本转换为小写。这不会更改文本字段中的文本大小写。
AB (Uppercase)在渲染之前将文本转换为大写。这不会更改文本字段中的文本大小写。
SC (Small Caps)使用小型大写字母。文本显示为全大写字母,但您实际输入的大写字母会更大。
Font Size指定文本显示的大小(单位:磅)。
Auto Size启用此选项以自动设置字体大小,基于自动调整选项。启用后,TextMesh Pro会多次布局文本以找到合适的大小。这个过程资源密集,因此避免频繁变化的动态文本使用自动调整。提示:对于静态文本,您可以启用自动调整,记下计算出的字体大小(在字体大小字段中显示),然后禁用自动调整并手动应用计算出的大小。
Auto Size Options定义自动调整文本大小的基本规则。
Min指定可接受的最小字体大小(单位:磅)。
Max指定可接受的最大字体大小(单位:磅)。
WD%指定调整文本大小时可接受的最大字符宽度减少量。TextMesh Pro会压缩字符以使它们更高,这通常仅适用于数字。
Line调整行高。这对于将较大字体适应到给定空间非常有用。

颜色属性与功能

属性功能
Vertex Color选择文本的主颜色。在TextMesh Pro GameObject或其材质中定义的任何颜色和纹理将与此颜色相乘。
Color Gradient启用此选项为每个字符的精灵应用颜色渐变。然后可以设置渐变类型和颜色,或者应用颜色渐变预设。渐变颜色会与主颜色相乘。如果主颜色为白色,则仅显示渐变颜色;如果为黑色,则完全看不见渐变颜色。
Color Preset选择颜色渐变预设。应用预设后,其颜色模式和颜色将替换Inspector中的文本局部属性。编辑这些属性会修改预设,从而影响所有使用该预设的TextMesh Pro GameObject。设置此属性为None可以恢复为文本的局部渐变属性。
Color Mode选择应用的颜色渐变类型。TextMesh Pro会单独为每个字符应用渐变。
Single均匀颜色,修改基础的Vertex Color。
Horizontal Gradient两种颜色的渐变,颜色从字符的一侧发散。
Vertical Gradient两种颜色的渐变,一种颜色从字符的顶部发散,另一种从底部发散。
Four Corners Gradient四种颜色的渐变,每种颜色从字符的一个角落发散。
Colors选择每个渐变颜色。根据渐变类型,提供的颜色数量会有所不同,颜色字段会按渐变中的颜色位置排列(左右、上下或四角)。可以通过以下方式设置颜色:1. 色板:点击打开颜色选择器。2. 吸管工具:点击从屏幕的任何部分选择颜色。3. 十六进制值:直接输入RGBA的十六进制值。
Override Tags启用此选项以忽略任何更改文本颜色的富文本标签。

间距设置与功能

控制字符、单词、行和段落之间的间距,可以微调单个TextMesh Pro GameObjects的文本.
 

属性功能
Character设置此TextMesh Pro GameObject中文本字符之间的间距。
Word设置此TextMesh Pro GameObject中文本单词之间的间距。
Line设置此TextMesh Pro GameObject中文本行之间的间距。
Paragraph设置此TextMesh Pro GameObject中文本段落之间的间距。段落通过显式换行符定义。

对齐设置与功能

对齐设置

一级选项子选项功能
Horizontal Alignment
Left, Center, Right

将文本水平放置在显示区域内,不改变文本本身。

Justified, Flush

将文本拉伸以填充显示区域的宽度,通过增加单词和字符之间的距离。

Wrap Mix选项控制单词和字符间距之间的平衡。

Justified模式不会拉伸段落的最后一行,而Flush模式会。

Geometry Center根据网格而非文本度量来居中显示文本。在某些情况下,这种模式的效果可能比常规居中对齐效果更好。
Vertical Alignment
Top, Middle, Bottom将文本垂直放置在显示区域内,不改变文本本身。
Baseline将文本的基线对齐到显示区域的中间。这在处理单行文本时非常有用。
Midline使用文本网格边界来决定垂直位置,而不是行度量。对于紧凑空间特别有用,避免字符的上升和下降部分超出。
Capline将文本的第一行中线与显示区域中间对齐。
Wrap Mix (W <-> C)

当水平对齐设置为Justified或Flush时,调整额外的单词间距和字符间距之间的平衡。


换行与溢出设置与功能

换行与溢出设置

属性功能
Wrapping启用或禁用单词换行。
OverflowOverflow文本超出显示区域,仍然进行换行(如果启用了换行)。
Ellipsis截断文本并插入省略号(…),表示有部分文本被省略。
Masking类似于Overflow,但着色器隐藏超出显示区域的所有内容。
Truncate当文本不适应显示区域时,直接截断文本,不显示超出部分。
Scroll Rect传统模式,类似于Masking。仅用于与旧版TextMesh Pro项目的兼容性,建议新项目使用Masking模式。
Page将文本分为多页,每页适应显示区域。你可以选择显示的页面,并通过富文本插入页面换行。
Linked将文本扩展到另一个TextMesh Pro GameObject,适用于创建多列文本。

UV Mapping

一些 TextMesh Pro 着色器允许你将一个或多个图像纹理应用于文本。这些选项控制这些纹理如何拉伸以适应文本。

还可以在着色器本身中编辑特定于着色器的纹理选项。可用的选项取决于使用的着色器。

在给文本添加纹理时,请确保您的纹理资产的 Wrap Mode 设置为 Repeat。否则,纹理在应用到文本时可能会发生严重的失真。


属性详细说明
Horizontal Mapping指定在使用支持纹理的着色器时,纹理如何水平映射到文本上。
Character将纹理水平拉伸到每个字符的精灵上。
Line将纹理水平拉伸到每行的整个宽度。
Paragraph将纹理水平拉伸到整个文本上。
Match Aspect

水平缩放纹理,使其保持其长宽比,并且不变形。

当使用此水平映射模式时,垂直映射设置决定纹理如何映射到文本,并且必须设置为不同于 Match Aspect。

Vertical Mapping指定在使用支持纹理的着色器时,纹理如何垂直映射到文本上。
Character将纹理垂直拉伸到每个字符的精灵上。
Line将纹理垂直拉伸到每行的整个宽度。
Paragraph将纹理垂直拉伸到整个文本上。
Match Aspect

垂直缩放纹理,保持其纵横比,不被变形。

当使用此垂直映射模式时,水平映射设置决定纹理如何映射到文本,并且必须设置为不同于 Match Aspect。

Line Offset

当水平映射设置为 Line、Paragraph 或 Match Aspect 时,设置此值以为每一行添加水平纹理偏移。

此值将添加到您在着色器中指定的 Offset X 值。


额外设置

进一步控制文本外观和行为的选项。


属性详细说明
Margins

设置正值以增加文本与文本容器边界之间的距离。

您可以分别设置左、上、右、下边距。负值会使文本超出文本容器的边界。您还可以通过在场景视图中拖动文本容器控件(黄色矩形)的手柄来调整边距。

Geometry Sorting

每个字符包含在一个四边形中。几何排序控制 TextMesh Pro 如何排序这些四边形。

这决定了当两个四边形重叠时,哪个字符会显示在上面。

NormalTextMesh Pro 按照网格中出现的顺序绘制四边形。当两个四边形重叠时,“较晚”的四边形会显示在“较早”四边形之上。
ReverseTextMesh Pro 反向顺序绘制四边形。当两个四边形重叠时,“较早”的四边形会显示在“较晚”四边形之上。
Rich Text禁用此选项以关闭 TextMesh Pro GameObject 的富文本支持。当禁用富文本支持时,标签不会被解析并且会作为常规文本进行渲染。
Raycast Target启用此选项以使此 TextMesh Pro GameObject 成为射线检测目标。禁用此选项会使 UI 在确定光标与哪个对象交互时忽略此 TextMesh Pro GameObject。
Parse Escape Characters启用此选项以使 TextMesh Pro 将反斜杠转义字符解析为特殊字符。例如,\n 被解析为换行符,\t 作为制表符等。注:此选项仅适用于渲染文本,代码中转义字符已由编译器解析。
Visible Descender使用脚本逐步显示文本时使用此选项。启用它可以先显示文本的底部,然后随着新行的显示向上移动;禁用它则按从上到下的顺序显示文本。要设置这种类型的文本显示,必须将垂直对齐方式设置为底部。
Sprite Asset
Kerning启用此选项以为此 TextMesh Pro GameObject 切换字距调整。字距调整在 GameObject 的字体资产中定义。如果新对象使用没有字距调整数据的字体,启用此设置不会产生任何效果。
Extra Padding启用此选项以为字符精灵添加额外的填充。TextMesh Pro 创建精灵以适应可见文本,但结果并不总是完美的。此设置可以减少字符在其精灵边界处被裁剪的几率。

字体资产

概述


要在 TextMesh Pro 中使用不同的字体,需要创建字体资产。可以从 Unity 字体资产创建 TextMesh Pro 字体资产。这是两个概念,可以利用前者生成后者,你理解前者是不同的风格(比如可以是宋体,或者是微软雅黑),后者是TMP_Text组件需要引用的资源.

这是前者,可以从网上下载一些开源资产

是一个 .otf类型的文件

这是后者,我利用前者生成了它.

每个 TextMesh Pro 字体资产都有两个子资产:

  • 字体图集:一个黑白或灰度纹理文件,包含字体资产中包含的所有字符。
  • 字体材质:一个材质,用于控制 TextMesh Pro 文本的外观,使用的是 TextMesh Pro 的其中一个着色器。

字体资产必须位于特定的文件夹中,以便 TextMesh Pro 能够找到它们并将其包含在构建中。要更改字体资产的默认文件夹,进入 TextMesh Pro 设置并设置 Default Font Asset > Path 选项。

创建字体资产


要创建一个 TextMesh Pro 字体资产,可以使用 TextMesh Pro 字体资产创建器

也可以从 Unity 主菜单创建一个空的 TextMesh Pro 字体资产。空字体资产默认不包含任何字符,必须稍后添加它们。要创建空的 TextMesh Pro 字体资产,请选择一个 Unity 字体资产,然后从菜单中选择 Asset > Create > TextMeshPro > Font Asset

使用创建器和直接右键Unity字体资产创建的TMP字体资产是有区别的,正好借此讲一下TMP字体资产的原理.

比如我选择直接右键创建,那么

注意这里生成的TMP字体资产是动态的.

如果不明白这个动态是什么意思的话,展开那个箭头(Project窗口设置为两行展示才能展开箭头)。

 这个黑色的贴图是把你字体第一次挂在Text上生成的,它是一个画布,下一步你就知道这有什么用了。

我将该资产给到UI使用

注意画布不存在"张三李四王五"字眼,

我在输入框输入张三李四王五,这些字眼原本不存在"黑布"上,因为我的输入,他们被记录到黑布上了

这就是动态的意思,它会动态存储自身不存在的字符.然后在需要的时候拿出来使用.

解决缺字问题

那么问题来了,不妨设想一下,这个图满了会怎么样?

比如这个TMP被用来展示一些动态读取的网络资源的文字,那么就可能被填满,那么会

左边缺少的字就是因为那是画布上不存在的字,却有没有地方把它印上去了.

我们可以扩大画布

比如将1024乘1024增大为2048乘2048.

同时编辑器调试的时候可能会将一些脏数据添加到"黑布",使用Clear 选项在打包的时候清除脏数据

或者使用静态,结合动态一起使用

下面使用创建器生成Tmp字体资产,只需要将Unity字体资产拖过去,同时从网上查找常用字资源(这是一个txt文件).

然后点击生成按钮,这实际上就是提前将很多字填到动态资产,然后转为静态(应该是这样).

使用该方式遇到了无法正确生成Tmp资产的情况,生成一个错误资产(未知原因,只能删除重试)

这样默认就是静态的.有一个点也要注意:同样是使用合适尺寸的"黑布",确保能容纳大量字符.

这样静态资产给那些不变的UI使用,动态的给不确定的UI使用.

还有一个问题:我上面使用一个txt生成的字体,万一还是有缺失的字怎么办呢?(静态不像动态那样,创建的时候如果没有这个字就是不会显示这个字)

点击这个按钮

搜索你缺失的那个字的unicode编码补充进去,然后重新生成一下并保存.

当然,应该也可以将静态的设为动态,然后将缺的字录入,然后再转回静态(未做尝试).

最后要注意的是:动态相对静态要更耗费性能,同时动态Tmp资产依赖的Unity字体资产不能删除,静态则可以.


http://www.ppmy.cn/devtools/150748.html

相关文章

速通nvm安装配置全程无废话

速通nvm安装配置全程无废话 1、安装包 通过网盘分享的文件&#xff1a;nvm-setup-1.1.11.zip等2个文件 链接: https://pan.baidu.com/s/1nk7pAFhhnHXDIIYRJLFqNw 提取码: niw8 --来自百度网盘超级会员v3的分享2、下载安装 nvm安装路径&#xff1a;D:\dev\nvm nodejs路径&am…

八股学习 Redis

八股学习 Redis 常见场景常见问题问题1、2示例场景缓存穿透解决方案一解决方案二 问题3示例场景缓存击穿解决方案 问题4示例场景缓存雪崩解决方案 问题5示例场景双写一致性强一致方案允许延时一致方案 问题6RDB方式AOF方式两种方式对比 问题7数据过期策略惰性删除定期删除 问题…

【Linux】进程状态

一、概念 我们需要知道进程的不同状态。一个进程可以有几个状态&#xff08;在Linux内核里&#xff0c;进程有时候也叫做任务&#xff09; 在操作系统原理中&#xff1a;运行状态分为以下三种&#xff1a;运行状态&#xff08;执行&#xff09;、阻塞状态、就绪状态 1. 运行状…

United States of America三种表示

"United States of America", "United States", 和 "America" 都表示美国&#xff0c;但它们的使用场景和背景略有不同。以下是关于为什么这些名称可以合在一起表示美国的详细解释&#xff1a; 1. "United States of America" 全称&a…

2Hive表类型

2Hive表类型 1 Hive 数据类型2 Hive 内部表3 Hive 外部表4 Hive 分区表5 Hive 分桶表6 Hive 视图 1 Hive 数据类型 Hive的基本数据类型有&#xff1a;TINYINT&#xff0c;SAMLLINT&#xff0c;INT&#xff0c;BIGINT&#xff0c;BOOLEAN&#xff0c;FLOAT&#xff0c;DOUBLE&a…

统计有序矩阵中的负数

统计有序矩阵中的负数 描述 给你一个 m * n 的矩阵 grid&#xff0c;矩阵中的元素无论是按行还是按列&#xff0c;都以非递增顺序排列。 请你统计并返回 grid 中 负数 的数目 示例 1&#xff1a; 输入&#xff1a;grid [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]]…

电商系统,核心通用架构案例设计方案浅析

文章目录 一、用户系统案例设计1、用户信息的存储方案2、用户注册确保唯一3、用户数据合并方案4、用户敏感信息加密存储5、数据传输安全性6、多用户数据隔离性7、防止恶意注册8、用户好友关系存储方案9、用户登录token方案10、会员优先处理设计 二、网关系统设计1、网关的功能2…

Oracle 学习指南与资料分享

Oracle 学习资料 Oracle 学习资料 Oracle 学习资料 在当今数字化飞速发展的浪潮中&#xff0c;Oracle 数据库凭借其卓越的性能、强大的功能以及高度的可靠性&#xff0c;稳坐数据库领域的前沿宝座&#xff0c;广泛应用于金融、电信、航空航天等诸多关键行业。如果你有志于深入…