24.Unity进阶TextMeshPro总结

24.总结


24.1 知识点

学习的主要内容

总结讲什么

TMP的优点

使用TMP时的注意事项


24.2 核心要点概览

TextMeshPro UI组件参数

分类 具体项目 详细说明
Enable RTL Editor 开启后文本从右向左显示,下方出现RTL Text Input框,可查看并编辑反转文本
Text Style H1、H2、H3:标题级别,数字越大级别越低
C1、C2、C3:颜色级别,区分文本颜色
Quote:引用文本样式
Link:超链接文本格式样式
Title:标题样式
Normal:普通正文文本样式
字体相关 Font Asset:可选择默认字体资源,TMP字体支持自定义
Material Preset:TMP字体显示基于材质球,切换材质球改变渲染效果(因Shader着色器不同),可调整材质球参数(如边缘线)
Font Style:B:加粗(Bold);I:斜体(Italic);U:下划线(Underline);S:删除线(Strikethrough);ab:小写文本(Small Caps Lowercase);AB:大写文本(All Caps);SC:大写文本,按实际输入字母大小显示(Small Caps)
Auto Size:勾选后有更多设置选项,消耗大少用。Auto Size Options:Min:最小字体大小(Minimum Size);Max:最大字体大小(Maximum Size);WD%:水平挤压字符(Width Percentage);Line:减少行间距(负数)(Line Spacing Reduction,negative value)
颜色 顶点颜色:与材质和纹理颜色相乘,决定字体最终颜色
颜色渐变:勾选后有新参数:
Color Preset:颜色预设(Color Preset)
Color Mode:Single:与顶点颜色叠加(Overlay with Vertex Color);Horizontal Gradient:双色水平渐变(Two-Color Horizontal Gradient);Vertical Gradient:双色垂直渐变(Two-Color Vertical Gradient);Four Corners Gradient:四色四角渐变(Four-Color Four-Corners Gradient)
Colors:依颜色模式设置多个颜色值
Override Tags:启用可忽略富文本标记对颜色的更改,通常不勾选
间距 字符间距 (Character):控制每个字符间的间距
单词间距 (Word):控制每个单词间的间距
行间距 (Line):控制行与行间的间距,适用于自动换行文本
段落间距 (Paragraph):控制段落间的间距,段落由显式换行符定义
对齐 水平对齐:
左对齐:文本靠左对齐(Left Align)
居中对齐:文本居中对齐(Center Align)
右对齐:文本靠右对齐(Right Align)
拉伸左对齐:增加间距填满行,最后一行不拉伸(Justify Left,last line not justified)
拉伸齐平:类似拉伸左对齐,最后一行也拉伸(Justify Full)
网格居中:按网格居中文本,效果更细致(Mesh Center,more delicate effect)
垂直对齐:
顶部对齐:文本靠顶部对齐(Top Align)
中部对齐:文本垂直居中对齐(Middle Align Vertically)
底部对齐:文本靠底部对齐(Bottom Align)
基线对齐:第一行基线与显示区域中间对齐,适用于单行文本(Baseline Align,suitable for single-line text)
中线对齐:类似中部对齐,依文本网格边界垂直放置,适合狭小空间(Middle Line Align,placed vertically according to text mesh boundary,suitable for narrow spaces)
卡普赖恩对齐:第一行中间与显示区域中间对齐(Cap Height Align,align the middle of the first line with the middle of the display area)
包裹与溢出 Wrapping:
Disabled:文本不自动换行,溢出显示(受溢出选项影响)(Text does not wrap automatically, and overflows as shown (affected by the overflow option))
Enabled:控件大小变化时文本自动换行(Text wraps automatically when the control size changes)
Overflow:
Overflow:文本溢出到显示区域外,若启用包裹会自动换行(Text overflows outside the display area. If wrapping is enabled, the text will wrap automatically)
Ellipsis:超出部分用省略号代替(Replace the overflowing part with an ellipsis)
Masking:类似Overflow,隐藏显示区域外内容(Similar to Overflow, hide the content outside the display area)
Truncate:超出内容直接截断不显示(Truncate the overflowing content and do not display it)
Scroll Rect:仅用于旧版TextMesh Pro项目兼容,新项目建议用遮罩模式(Only used for compatibility with legacy TextMesh Pro projects. It is recommended to use the masking mode for new projects)
Page:文本切分为多个页面,可选择显示具体页面内容(Divide the text into multiple pages, and you can select the specific page content to display)
Linked:文本扩展到指定TextMesh Pro游戏对象,当前对象溢出内容在关联对象显示(Extend the text to the specified TextMesh Pro game object, and the overflowing content of the current object will be displayed in the associated object)
UV映射 Horizontal Mapping:
Character:在每个文字上水平拉伸纹理(Stretch the texture horizontally on each character)
Line:在每条线宽度上水平拉伸纹理(Stretch the texture horizontally across the entire width of each line)
Paragraph:在整个文本中水平拉伸纹理(Stretch the texture horizontally across the entire text)
Match Aspect:水平缩放纹理,保持纵横比不变(Scale the texture horizontally while maintaining the aspect ratio)
Vertical Mapping:
Character:在每个文字上垂直拉伸纹理(Stretch the texture vertically on each character)
Line:在每条线高度上垂直拉伸纹理(Stretch the texture vertically across the entire height of each line)
Paragraph:在整个文本中垂直拉伸纹理(Stretch the texture vertically across the entire text)
Match Aspect:垂直缩放纹理,保持纵横比不变(Scale the texture vertically while maintaining the aspect ratio)
Line Offset:选择“Line”“Paragraph”或“Match Aspect”模式时,控制纹理偏移位置(Control the texture offset position when the “Line”, “Paragraph”, or “Match Aspect” mode is selected)
额外设置 边缘设置 (Margins):设置文本和文本容器间的间距,可用负值使文本超出边框,可在Scene窗口操作黄色边框调整
几何排序 (Geometry Sorting):
Normal:按显示顺序排序,重叠时靠近摄像机的在前面(Sort according to the display order. When quadrilaterals overlap, the ones closer to the camera are in the front)
Reverse:按相反顺序绘制四边形,重叠时远离摄像机的在前面(Draw quadrilaterals in the opposite order. When they overlap, the ones farther from the camera are in the front)
是否静态缩放 (Is Scale Static):告诉TMP文本系统文本无缩放变化,TMP跳过缩放计算,减少CPU和GPU负担,适用于缩放比例固定的文本对象
富文本 (Rich Text):控制是否开启富文本,默认开启,开启后可识别富文本关键字
射线检测目标 (Raycast Target):决定文本是否响应点击、触摸等事件,关闭时触摸和点击“穿透”,需响应则勾选
遮罩裁剪 (Maskable):决定文本是否被Mask组件裁剪,勾选时被裁剪,取消勾选时不被裁剪
转义字符解析 (Parse Escape Characters):决定文本是否解析转义字符,开启时解析,关闭时无效
可见下降 (Visible Descender):用脚本缓慢显示文本时启用,可显示底部文本,显示新行时向上移动,需将垂直对齐改为Bottom
精灵资源 (Sprite Asset):允许在文本中嵌入2D精灵图片,处理图文混排,如嵌入表情符号
样式表资源 (Style Sheet Asset):管理和应用文本样式,TMP_Style Sheet文件定义多种样式,可在多个文本组件重复使用,确保样式一致
自动字符间距调整 (Kerning):自动调整字符间距,提高文本可读性和美观性
额外填充 (Extra Padding):为文本边界添加额外填充,避免文本与边界过近,提升视觉效果

TextMeshPro UI参数和方法

TextMeshPro UI 组件常用属性

属性 说明 示例代码
文本内容 (text) 用于设置或获取文本显示的内容 textMeshProUGUI.text = "123123adfasdklf545454564654654646454564654132156465424";
字体 (font) 可获取或设置所使用的字体 textMeshProUGUI.font = ...;
字体大小 (fontSize) 设置字体的大小 textMeshProUGUI.fontSize = 10;
颜色 (color) 设置文本的颜色 textMeshProUGUI.color = Color.black;
对齐方式 (alignment) 设置文本的对齐方式 textMeshProUGUI.alignment = TextAlignmentOptions.Center;
行间距 (lineSpacing) 设置文本行与行之间的间距 textMeshProUGUI.lineSpacing = 50;
是否启用富文本 (richText) 决定是否启用富文本格式 textMeshProUGUI.richText = false;

TextMeshPro UI 组件常用方法

方法 说明 示例代码
SetText 设置文本内容,支持富文本格式 textMeshProUGUI.SetText("<color=blue>Hello, World!</color>");
Rebuild 强制重新构建文本网格 textMeshProUGUI.Rebuild(UnityEngine.UI.CanvasUpdate.Prelayout);
ForceMeshUpdate 在运行时动态更改文本时,强制更新文本网格 textMeshProUGUI.ForceMeshUpdate();
Length 获取文本中字符的数量 print(textMeshProUGUI.text.Length);

CanvasUpdate 枚举

  • Prelayout:布局前调用
  • Layout:布局时调用
  • PostLayout:布局后调用
  • PreRender:渲染前调用
  • LatePreRender:渲染后调用
  • MaxUpdateValue:最后调用

UI 事件监听
若要为 TMP UI 添加交互事件,可使用 UGUI 中的 EventTrigger 组件。

3D 文本和 UI 文本区别

分类 3D 文本(TextMeshPro) UI 文本(TextMeshProUGUI)
使用的组件 使用 TextMeshPro 组件 使用 TextMeshProUGUI 组件
用途 主要用于在 3D 场景中显示文字 主要用于在 UI 中显示文字,具备与 UI 相关的一些属性
渲染方式 直接渲染在场景上 通过 UGUI 的 Canvas 系统渲染
交互方式 通常通过添加碰撞器进行碰撞检测来判断交互 一般利用 UI 系统的交互规则,比如 EventTrigger
如何选择 如果文本需要与 3D 场景交互,或者需要在 3D 场景中显示,选择 3D 文本 TextMeshPro,将其视为 3D 物体进行处理 如果文本需要在 UI 系统中使用,选择 TextMeshProUGUI,将其视为 UI 组件处理
参数相关 3D 文本的参数设置与 UI 文本的相关参数几乎完全一致 UI 文本有与 UI 系统相关的一些属性设置
脚本控制 示例代码:
using TMPro;
using UnityEngine;
public class Lesson09_3D 文本 : MonoBehaviour {
public TextMeshProUGUI textMeshProUGUI; // UI 文本组件
public TextMeshPro textMeshPro; // 3D 文本组件
}
与 3D 文本在脚本控制上,组件名称不同,其他部分属性和方法几乎一致

字体资源

字体资源-基本信息设置

分类 设置项 详细说明
更新纹理图集 操作按钮 点击“更新纹理图集”,打开字体资源创建器新窗口,用于配置字体的图集纹理信息和生成静态字体资源,可将 Unity 字体资源转换为 TMP 字体资源,生成后若不再用源字体资源重新生成 TMP 字体,可删除源字体资源
基本信息设置 Source Font File 选择用于生成 TMP 字体资源的字体
Sampling Point Size 设置用于生成字体纹理的字体大小(以磅为单位),有“Auto Sizing”(使用尽可能大的大小,常用设置)和“Custom Size”(自定义大小)两种方式
Padding 指定字体纹理中字符之间的间距(以像素为单位),填充越大,过渡越平滑
Packing Method Fast:字符打包速度快,但字体的大小可能更小,测试字体时可使用
Optimum:尽可能合理利用纹理中的空间,保持字符最大可能的字体大小,正式确定字体时使用
Atlas Resolution 根据字符集选择合适的分辨率,如只有 ASCII 字符,用 512x512 即可;中文字体时,需要更大更多的图集(比如 1024x1024)
Character Set ASCII:标准 ASCII 字符集(字母,数字,标点符号)
Extended ASCII:拓展 ASCII 字符集(增加了许多特殊字符和符号)
ASCII Lowercase:仅包含小写字母字符(a~z)
ASCII Uppercase:仅包含大写字母字符(A-Z)
Numbers + Symbols:包含数字(0-9)和常见的符号(如 !, @, #, $, % 等)
Custom Range:允许用户定义一个自定义字符范围,用户可以指定要包含的 Unicode 范围
Unicode Range(Hex):允许用户输入 Unicode 范围的十六进制值
Custom Characters:用户可以手动输入要包含的具体字符,可以是任何字符(如字母、符号等)
Characters from File:从文本文件中读取字符,允许用户根据文件内容自动生成字符集,适合大量字符的处理
Select Font Asset 选择对应的字体资源
Character Sequence 当选择需要自己输入字体的相关模式时,会出现
Render Mode SMOOTH_HINTED:抗锯齿位图,字符像素和纹理像素对齐,以获得更清晰的结果,通常用于小字体或需要精确对齐的情况
SMOOTH:采用抗锯齿效果,提供平滑的边缘,适合大多数情况下的文本显示
COLOR_HINTED:基于颜色的抗锯齿效果,强调颜色的呈现,适合需要突出颜色的文本
COLOR:不使用抗锯齿,直接渲染文本的颜色,适合在高对比度或需要清晰边缘的场景中使用
RASTER_HINTED:位图渲染,通常用于较小字体,能够提供较高的清晰度
RASTER:位图渲染,不进行抗锯齿处理,提供快速渲染,但在边缘可能出现锯齿现象
SDF:使用带符号的距离场技术渲染,能够在缩放时保持清晰度
SDF8:使用 8 位 SDF 渲染,支持更小的纹理,适合资源受限的环境
SDF16:使用 16 位 SDF 渲染,提供更高的清晰度和更细腻的边缘
SDF32:使用 32 位 SDF 渲染,具有最高的细节和清晰度
SDFAA_HINTED:使用抗锯齿的 SDF 渲染,提供平滑的边缘和清晰的字符显示
SDFAA:使用 SDF 渲染,但不进行抗锯齿处理,快速渲染
Get Kerning Pairs 用于在字体资源中获取字偶间距调整(Kerning)对
Generate Font Atlas 生成字体图集
Save 保存图集
Save as… 另存为
字体属性设置 Family Name 字体名称,无法手动修改,创建字体资源时默认设置
Style Name 样式名称,无法手动修改,创建字体资源时默认设置
Point Size 字体大小(以磅 Point,缩写 pt 为单位),1 磅等于 1/72 英寸(约 0.353 毫米),在字体设计中,磅数用来表示字体的高度
Scale 对字体进行缩放,1 为原始大小,不缩放
Line Height 表示每行文本的高度,通常是基于最大字形的高度计算的,决定了两行文本之间的距离
Ascent Line 字形中最高的点到基线的垂直距离,表示字母中最高部分(大写字母或某字符的上部)的位置
Cap Line 表示所有大写字母的顶部所处的水平线,通常略低于上升线
Mean Line 表示小写字母的顶部所处的水平线,表示小写字母的标准高度
BaseLine 所有字母字符所处的水平线,大多数字符都在这条线的上方
Descent Line 字形中最低的点到基线的垂直距离,表示字母中最低部分的水平线
Underline Offset 下划线相对基线的位置
Underline Thickness 控制下划线的粗细
Strikethrough Offset 控制删除线相对于基线的位置
Superscript Offset 使上标文本相对基线偏移
Superscript Size 相对于正常字体大小缩放上标文本
Subscript Offset 使下标文本相对基线偏移
Subscript Size 相对于正常字体大小缩放下标文本
Tab Width 指定 TAB 字符的宽度

字体资源-生成设置和图集纹理

分类 设置项 详细说明
基本设置 Source Font File 用于指定字体资源所使用的字体文件
Atlas Population Mode 纹理图集生成方式,有以下两种模式:
Static(静态模式):字体集在创建时需要一个固定的纹理图集,适用于字符已知且不需要动态变化的情况,如仅有少量英文字符时。
Dynamic(动态模式):字体纹理图集会在运行时根据需要动态生成,能够显示更多字符,适合中文项目或多语言项目
Atlas Render Mode 字体渲染模式,具体如下:
SMOOTH_HINTED:抗锯齿位图,字符像素和纹理像素对齐,适合小字体或精确对齐的场景。
SMOOTH:提供平滑边缘,适用于大多数文本显示,兼顾清晰度和性能。
COLOR_HINTED:基于颜色的抗锯齿,突出颜色效果。
COLOR:不使用抗锯齿,适用于高对比度或需要清晰边缘的场景。
RASTER_HINTED:位图渲染,适合较小字体,但放大时可能模糊。
RASTER:快速渲染模式,但边缘可能出现锯齿。
SDF:带符号距离场技术,支持缩放时保持清晰。
SDF8:8 位 SDF 渲染,适用于资源受限环境。
SDF16:16 位 SDF 渲染,提供更高清晰度。
SDF32:32 位 SDF 渲染,适合需要极高质量的文本。
SDFAA_HINTED:抗锯齿的 SDF 渲染,提供平滑边缘和清晰字符显示。
SDFAA:SDF 渲染但无抗锯齿,快速渲染但可能出现锯齿
Sampling Point Size 设置生成字体纹理时的字体大小,单位为磅,有以下两种设置方式:
Auto Sizing:使用尽可能大的字体大小(推荐)。
Custom Size:自定义字体大小
Padding 指定字体纹理中字符之间的间距,单位为像素,较大的填充值可以提供更平滑的过渡效果
Atlas Width 设置字体纹理图集的宽度
Atlas Height 设置字体纹理图集的高度
Multi Atlas Textures 是否采用多图纹理,允许在字体资源中生成多个纹理图集(Atlas),而不仅仅是一个。这样可以更灵活地管理不同字符集或不同字体样式,提高性能和内存使用效率,尤其是在需要渲染大量不同字符的情况下建议使用
Clear Dynamic Data On Build 在构建时清除动态生成的数据。若选择了动态字体模式,构建时会移除不再需要的动态字符数据,以节省内存,减少最终构建包的大小,确保只包含必要的字符数据
Font Atlas 生成字符资源时创建的字体纹理图集
Font Material 生成字体资源时创建的字体材质

字体资源-字体粗细

分类 设置项 详细说明
字体类型 Regular Typeface 常规字体
Italic Typeface 斜体字体
字体粗细等级 100 - thin
200 - Extra - Light 超轻
300 - Light
400 - Regular 常规(仅限斜体)
500 - Medium
600 - Semi - Bold 半粗
700 - Bold 粗体
800 - Heavy
900 - Black 黑体
默认粗细 Normal Weight 没有字体资源用时使用的常规字体粗细
Bold Weight 没有字体资源用时使用的粗体字体粗细
间距设置 Spacing Offset 使用普通文本样式时,在字符之间的间隙偏移
Bold Spacing 没有指定粗体资源时,粗体文本字符之间的间距偏移
斜体样式 Italic Style 400 - Regular > Italic Style 变体指定字体资源没有设置时,TMP将使用常规样式字体资源中的字符倾斜该字段中的量来达到斜体效果
制表符设置 Tab Multiple 该值乘以字体空格符的宽度,用来表示制表符的大小

字体资源-其他设置

分类 设置项 详细说明
备用字体资源 Fallback Font Assets 每个字体资源包含字符数量有限,当使用当前字体资源不包含的字符时,TMP 会搜索回退字体列表,找到包含该字符的字体资源用于呈现字符
Fallback List 列出所有备用字体资产,主字体缺少某些字符时,系统按顺序尝试使用这些备用字体查找。可创建字体变体关联该列表,在字体变体中做特殊字符添加等处理
字符表 Character Table - Character Search 用于字符查找
字形表 Glyph Table - Glyph Search 用于字形搜索
X、Y、W、H:字符在纹理中对应的位置范围
W、H:字形的宽高
BX、BY:相对基线的左上角位置
AD:和下一个字符间隔的宽
Scale:缩放大小
Atlas Index:图集索引,在开启多图集时,表示在第几个图集中
字形调整表 Glyph Adjustment Table 控制特定字符对之间的间距
Adjustment Pair Search:用于调整对搜索
Char 左和右:想要查找的字符
ID 左和右:唯一标识符,一般显示左右字符的 ASCII 十进制编码
OX 左和右:字符原点坐标 X
OY 左和右:字符原点坐标 Y
AX 左和右:字符的宽度
Add New Glyph Adjustment Record:添加新的字形调整记录

富文本标签

标签 详情
文本加粗 <b></b>
文本斜体 <i></i>
加下划线 <u></u>
改变大小 <size=数值></size>
改变颜色 <color=#RGBA 16 进制></color>
对齐方式 <align=left、center、right、justified、flush></align>
背景高亮 <mark=#RGBA 16 进制></mark>
透明度 <alpha=#A 16 进制>
全部大写 <allcaps></allcaps>
改字体和材质(可选) <font="字体名" material="材质名"></font>
加上标 (平方) <sup></sup>
加下标 (化学式) <sub></sub>
超链接 <link="链接"></link>
文本加粗示例 <b>这是文本加粗示例。</b>
文本斜体示例 <i>这是文本斜体示例。</i>
加下划线示例 <u>这是加下划线示例。</u>
改变大小示例 <size=30>这是改变大小示例。</size>
改变颜色示例 <color=#00FF00>这是改变颜色示例。</color>
左对齐示例 <align=left>这是左对齐示例。</align>
背景高亮示例 <mark=#FFFF00>这是背景高亮示例。</mark>
透明度示例 <alpha=#80>这是透明度示例。</alpha>
全部大写示例 <allcaps>这是全部大写示例。</allcaps>
改字体和材质示例 <font="LiberationSans SDF" material="LiberationSans SDF - Outline">123 这是改字体和材质示例。</font>
加上标示例 正常这是加上标示例。
加下标示例 正常这是加下标示例。
超链接示例 <link="https://www.example.com">这是超链接示例。</link>

样式表

分类 详情
定义 样式表是 TMP 提供的与富文本标签配合使用的功能,可自定义文本样式,在富文本中用<style="样式表名"></style>标签包裹文字应用样式,本质是对富文本标签的复用,能避免重复书写冗余的富文本样式编码
修改和创建 修改默认样式表
创建样式表
配置参数:Name
HashCode
Opening Tags
Closing Tags
Up、Down
+、-
Previous、Next
样式对应 每一个 TMP 控件中的额外设置中,都可关联对应的样式表资源,若未设置,则使用默认样式表

图文混排

分类 操作 详情
定义 精灵图片资源是与富文本标签配合使用的资源,可在 TMP 文本中显示图片,实现图文混排,创建并配置好后,利用富文本标签在文本中展示图片
创建 创建图集 根据需求建立图集纹理,Texture Type 设为 Sprite,Sprite Mode 设为 Multiple,需导入 2D Sprite 包,在 Sprite Editor 中将图集中图片划分为单独的 Sprite
创建精灵图片资源 准备好图集文件后,在 Project 窗口选中图集右键 → Text Mesh Pro → Sprite Asset 创建。创建后需设置:
1. 图片名称。
2. 图片位置和宽度相关参数,配合全局偏移和缩放参数设置。
关键参数:
BX、BY:相对于基线的原点的左上角。
AD:放置下一个内容时向右前进的位置
使用 默认资源获取图片 使用以下标签格式:
1. <sprite index=图片ID color=#RGBA的16进制(可选)>
2. <sprite name="图片名" color=#RGBA的16进制(可选)>
3. <sprite=图片ID color=#RGBA的16进制(可选)>
指定资源获取图片 使用以下标签格式:
1. <sprite="资源名" index=图片ID color=#RGBA的16进制(可选)>
2. <sprite="资源名" name="图片名" color=#RGBA的16进制(可选)>
关联使用 可将精灵图片资源直接关联到对应的 TMP 文本控件中使用,若不关联,则使用默认资源
示例演示 <sprite index=0 color=#FF0000>
<sprite name="EmojiOne_0" color=#00FF00>
<sprite=0 color=#0000FF>

项目设置TextMeshPro基本设置

分类 设置项 详细说明
默认字体设置 Default Font Asset 存储默认字体设置相关信息
Path:字体资源的存储位置
备用字体资源 Fallback Font Assets 设置备用字体资源,用于当前字体资源无法满足需求的场景
Fallback Material Settings:备用材质设置
Match Material Presets:启用后,备用字体中的字形与主字体的样式匹配,使主字体和后备字体看起来更接近
动态字体系统设置 Dynamic Font System Setting 配置动态字体系统相关选项
Get Font Features at Runtime:运行时获取字体功能
Missing Character Unicode:当找不到字符时使用的替代字符,默认值为 0,显示为一个正方形轮廓
Disable warnings:启用后可避免 Unity 为每个缺失字形记录的警告
文本容器默认设置 Text Container Default Setting 设置文本容器的默认行为和选项
TextMeshPro:3D 文本默认大小
TextMeshPro UI:UI 文本默认大小
Enable Raycast Target:是否默认为文本对象启用射线检测
Auto Size Text Container:启用后会自动调整文本容器的大小
Is Object Scale Static:是否为静态缩放
文本组件默认设置 Text Component Default Setting 设置文本组件相关的默认行为
Default Font Size:默认字体大小
Text Auto Size Ratios:文本自动调整大小比例
Word Wrapping:是否启用自动换行
Kerning:是否启用字偶间距调整
Extra Padding:是否额外进行填充,可降低字符在精灵边界处被截断的几率
Tint All Sprites:为所有精灵图片着色
Parse Escape Sequence:是否解析转义字符
默认精灵图片资源 Default Sprite Asset 设置文本精灵图片相关选项
Missing Sprite Unicode:精灵缺失时采用的替代符,默认为方形轮廓
IOS Emoji Support:是否支持 IOS 表情符号
Path:精灵图片资源存储路径
默认样式表 Default Style Sheet 设置默认样式表的路径
Path:样式表资源存储路径
默认颜色渐变预设 Color Gradient Presets 设置默认颜色渐变选项
Path:颜色渐变预设存储路径
亚洲语言换行规则 Line Breaking for Asian Languages 用于处理亚洲语言的换行规则,设置亚洲语言换行相关的行为
Leading Characters:前导符号,一般不允许出现在行首,遇到这些字符触发自动换行时,字符会显示在尾部
Following Characters:尾随符号,一般不允许出现在行尾,如果这些符号出现在行尾触发自动换行时,会将这些符号移动到下一行
韩语相关设置 Korean Language Options 用于设置与韩语换行规则相关的选项
Use Modern Line Breaking:使用现代换行,启用后将采用更符合韩语规则的换行方式

SDF材质球

分类 设置项 详细说明
SDF 含义 有符号(Signed) 距离可以为正或负,正表示点位于边界外部,负表示点位于边界内部
距离(Distance) 每个像素点到字符边缘的距离
场(Field) 整个字体或图形周围的距离值的分布
技术本质 在 Shader 中利用 SDF 算法渲染文字,生成的字体纹理基于每个像素到字体边缘的距离值,存储在纹理灰度通道,渲染时着色器根据距离值计算字体边缘,呈现平滑字符轮廓
在 TMP 中的作用 用于生成和渲染文本,使字体在任意大小或距离下保持清晰和锐利效果
SDF 材质球含义 本质 使用了 SDF Shader 的材质球
效果 利用该 Shader 渲染的字体效果更好
可配置性 Shader 提供许多可配置参数,调整参数可实现复杂美术表现效果
SDF 材质球主要内容 基础表面设置(Face) Color:文本表面颜色,与 TMP 组件中设置颜色相乘叠加
Texture:为文本添加贴图
Tiling:平铺(缩放)
Offset:偏移
Speed:移动速度(可实现滚动效果,配合 UV 配置)
Softness:边缘柔和度,使文字边缘模糊
Dilate:拓展,类似改变字体粗细
边缘线设置(Outline) Color:边缘线颜色
Texture:边缘线纹理,与轮廓颜色相乘叠加
Thickness:轮廓粗细,值越大越粗
阴影(底层)设置(Underlay) Underlay Type:
None:无阴影
Normal:标准底图样式
Inner:反转底图,用原始文本遮罩它
Color:底图阴影颜色
Offset X:X 轴偏移
Offset Y:Y 轴偏移
Dilate:拓展,改变粗细
Softness:边缘柔和度,使阴影边界模糊
照明设置(Lighting) - 斜面设置(Bevel) Type 类型:
Outer Bevel:外斜面,字体有倾斜侧面的凸起效果
Inner Bevel:内斜面,字体轮廓向内凹陷
Amount:陡峭程度
Offset:位置偏移
Width:斜面大小
Roundness:使斜面更平滑
Clamp:限制斜面最大高度
照明设置(Lighting) - 本地照明设置(Local Lighting) Light Angle:光照角度
Specular Color:镜面反射颜色
Specular Power:镜面反射强度
Reflectivity Power:反射强度
Diffuse Shadow:漫反射阴影
Amblent Shadow:环境阴影
照明设置(Lighting) - 凹凸贴图设置(Bump Map) Texture:凹凸贴图
Face:凹凸影响程度
Outline:凹凸贴图对文本轮廓的影响程度
照明设置(Lighting) - 环境设置(Environment Map) Face Color:立方体贴图对文本颜色的影响
Outline Color:立方体贴图对轮廓颜色的影响
Texture:环境立方体贴图
Rotation:旋转环境贴图
发光设置(Glow) Color:发光颜色
Offset:发光效果中心偏移值
Inner:发光效果向内延伸距离
Outer:发光效果向外延伸距离
Power:发光强度
调试设置(Debug Settings) Font Atlas:字体图集
Gradient Scale:渐变比例
Texture Width/Height:纹理宽高
Scale X/Y:SDF 比例乘数
Sharpness:清晰度
Perspective Filter:透视过滤器,使文本在透视摄像机下更柔和
Offset X/Y:每个字符顶点位置的偏移量
Mask:
关闭蒙版
硬蒙版
柔和蒙版
Clip Rect:剪辑矩形,设置遮罩矩阵范围
Stencil ID:模板 ID
Stencil Comp:模板成分
Uset Ratios:使用率
Cull Mode:裁剪模式

MP_TextEventHandler

主要类 委托 事件 参数
TMP_TextEventHandler onLinkSelection 当用户悬停或点击超链接时触发 string linkInfo:超链接的相关信息;
string linkText:超链接显示的文本;
int index:超链接在文本中的索引位置
TMP_TextEventHandler onCharacterSelection 当用户悬停或点击某个字符时触发 char charInfo:被点击或悬停的字符;
int i:字符在文本中的索引位置
TMP_TextEventHandler onSpriteSelection 当用户悬停或点击某一精灵图片时触发 char spirteInfo:与精灵图片相关的字符信息;
int i:精灵图片在文本中的索引位置
TMP_TextEventHandler onWordSelection 当用户悬停或点击某个单词时触发 string word:被点击或悬停的单词;
int i1:单词在文本中的起始索引位置;
int i2:单词在文本中的结束索引位置
TMP_TextEventHandler onLineSelection 当用户悬停或点击某一行文本时触发 string lineInfo:被点击或悬停的行文本内容;
int i1:行在文本中的起始索引位置;
int i2:行在文本中的结束索引位置

TMP_TextUtilities

分类

  • 获取给定位置文本中的具体信息

    • 获取链接索引:int FindIntersectingLink(TMP_Text text, Vector3 position, Camera camera)
    • 获取单词索引:int FindIntersectingWord(TMP_Text text, Vector3 position, Camera camera)
    • 获取单字符索引:int FindIntersectingCharacter(TMP_Text text, Vector3 position, Camera camera)
    • 获取行索引:int FindIntersectingLine(TMP_Text text, Vector3 position, Camera camera)
  • 获取离给定位置最近的文本信息

    • 获取链接索引:int FindNearestLink(TMP_Text text, Vector3 position, Camera camera)
    • 获取单词索引:int FindNearestWord(TMP_Text text, Vector3 position, Camera camera)
    • 获取单字符索引:int FindNearestCharacterOnLine(TMP_Text text, Vector3 position, Camera camera)
    • 获取行索引:int FindNearestLine(TMP_Text text, Vector3 position, Camera camera)

代码示例

using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;

public class Lesson22_TMP_TextUtilities : MonoBehaviour, IPointerClickHandler
{
    public TextMeshProUGUI textMeshProUGUI;

    public void OnPointerClick(PointerEventData eventData)
    {
        print("OnPointerClick TextMeshProUGUI");

        // 获取链接索引,传入 TMP、鼠标位置、UI 摄像机(默认可以传 null)
        int linkIndex = TMP_TextUtilities.FindIntersectingLink(textMeshProUGUI, eventData.position, null);

        // 如果不为 -1,则证明点击到了一个超链接信息
        if (linkIndex != -1)
        {
            // 获取超链接显示的文本信息,例如 "百度"
            print(textMeshProUGUI.textInfo.linkInfo[linkIndex].GetLinkText());

            // 获取富文本标签 <link=?> 中的? 具体地址信息,例如 "谷歌"
            print(textMeshProUGUI.textInfo.linkInfo[linkIndex].GetLinkID());
        }

        // 获取单字符索引,传入 TMP、鼠标位置、UI 摄像机(默认可以传 null)、是否检测可见性
        int charIndex = TMP_TextUtilities.FindIntersectingCharacter(textMeshProUGUI, eventData.position, null, true);

        // 如果索引不为 -1,打印点击到的字符
        if (charIndex != -1)
        {
            print(textMeshProUGUI.textInfo.characterInfo[charIndex].character);
        }
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏