·来源于唐老狮的视频教学,仅作记录和感悟记录,方便日后复习或者查找
一.导入TextMeshPro
对于新创建的工程,可以直接在这里导入TMP必要的资源(上面),以及TMP的实例和扩展(下面)
导入之后如果要更新版本,可以去PackageManager中搜索,可以更新的话右上角会有一个更新的按钮的(我这里已经点击更新到最新版本了,所以没有了)
二.UI文本控件
在层级窗口中右键UI中可以直接找到TMP文本控件并创建,它本身和老的Text控件很像,都是用来显示文本的控件
1.参数设置
1.1.文本输入与字体设置
- Text Input:输入什么文本,控件上就会显示什么文本
- Enable RTL Editor:输入的文本会反向显示出来(本来从左到右,勾选之后显示顺序是从右到左)
- Text Style:选择文本提前在样式表中设定好的样式
- Font Asset:字体资源。选用不同的字体资源能够让控件显示的文本样式和字符范围不同
- Material Preset:字体的材质
- Font Style:B调节字符加粗,I斜体,U下划线,S删除线,ab全部小写,AB全部大写,SC大写文本但是以实际输入的字母大小显示
- Font Size:字体大小
- Auto Size:根据文本框大小自动调节字体大小。下方可以调节最大最小字体
1.2.文本颜色设置
- Vertex Color:顶点颜色。看成是字体颜色就好了
- Color Gradient:勾选后会给字体添加颜色渐变效果
- Color Preset:颜色渐变的预设
- Color Mode:
Single和顶点颜色叠加,Horizontal Gradient横向渐变,Vertical纵向渐变,Four Corners Gradient四角渐变
- Override Tags:是否忽略富文本标签设定的颜色(一般不用勾选)
1.3.文本布局设置
Spaceing Options(em):字符间隔设置
- Character:单个字符之间的间距
- Word:每个单词之间的间距(空格来判断是否为单词)
- Line:每行之间的间隔(包含自动换行)
- Paragraph:每个段落的间隔(不包含自动换行,以回车来判断)
Alignment:对齐方式
- 左/中/右对对齐;左平齐(增加单词和字符之间的间距填满每一行 最后一行不会拉伸
/同上,最后一行会拉伸
),以网格居中对齐
- 顶部 /中部/底部对齐,基线对齐/中线对齐/卡普赖恩对齐(使第一行中间与 显示区域的中间对齐)
1.4.文本自动换行与溢出设置
Warpping:决定是否启动自动换行
Overflow:对于溢出的字符如何处理
- Overflow/Masking/:不管,就让他溢出了
- Ellipsis:溢出的地方标记省略号
- Truncate:直接截断
- Scroll Rect:滚动矩形 此选项仅用于与较旧的 TextMesh Pro 项目兼容。对于新项目,请改用遮罩模式
- Page:翻页模式
。注意要搭配自动换行来使用。
- Link:连接其他文本控件以显示溢出的内容。
1.5.UV映射调整设置
Horizontal Mapping: 水平映射
Vertical Mapping: 垂直映射
Line Offset: 设置为 线段、段落、匹配模式时,会出现该参数 用于控制偏移位置
1.6.其他额外参数
- Margins:页边。设定当前文本和文本框四周的间隔距离
- Geometry Sorting:几何排序。
Normal就是离摄像机近先渲染,Reverse就是离摄像机远先渲染
- Is Scale Static:告诉TMP文本系统该文本不会发生缩放相关变化 TMP会跳过与缩放相关的计算,从而减少CPU和GPU的负担,提升性能
- Rich Text:是否支持富文本
- Raycast Target:是否会被点击
- Maskable:是否会被遮罩
- Parse Escape Characters:是否使用转义字符
- Visible Descender:可见下降 使用脚本缓慢显示文本时,启用该选项 启用它可现实底部文本,并在显示新行时向上移动 需要把垂直对齐改为Bottom下部对齐
- Sprite Asset:Sprite 资源 允许文本中嵌入精灵2D图片,用于处理图文混排时很重要 比如嵌入表情符号等等
- Style Sheet Asset:管理和应用文本样式,使文本格式更加高效和统一 TMP_Style Sheet文件可以定义多种文本样式,并在多个文本组件中重复使用,确保一致性
- Kerning:自动调整字符间距,提高文本可读性和美感
- Extra Padding:额外填充 为文本的边界添加额外填充,避免文本与边界过于靠近,提升视觉效果
2.脚本控制
2.1.脚本获取UI文本控件
1.需要引用TMP命名空间 TMPPro
2.TMP UI组件名为 TextMeshProUGUI
2.2.TMP常用的属性
//1.文本内容//text;tmpUIText.text = "123123adfasdklf545454564654654646454564654132156465424";//2.字体//font//tmpUIText.font//3.字体大小//fontSize//tmpUIText.fontSize = 10;//4.颜色//colortmpUIText.color = Color.black;//5.对齐方式//alignmenttmpUIText.alignment = TextAlignmentOptions.Center;//6.行间距//lineSpacingtmpUIText.lineSpacing = 50;//7.是否启用富文本//richText;tmpUIText.richText = false;
2.3.TMP常用的方法
//1.设置文本内容,支持富文本格式//SetText("<color=blue>Hello, World!</color>");tmpUIText.SetText("123123123123123");//2.强制重新构建文本网格,通常在文本内容或样式更改后使用// Prelayout 布局前调用// Layout 布局时调用// PostLayout 布局后调用// PreRender 渲染前调用// LatePreRender 渲染后调用// MaxUpdateValue 最后调用//Rebuild(UnityEngine.UI.CanvasUpdate.LatePreRender);tmpUIText.Rebuild(UnityEngine.UI.CanvasUpdate.Prelayout);//3.强制更新文本网格,运行时动态更改文本时//ForceMeshUpdate();tmpUIText.ForceMeshUpdate();//4.获取文本中字符数//text.Length;print(tmpUIText.text.Length);
2.4.事件监听
通过添加Event Trigger组件后,选择对应要监听的事件,并提供相应的函数即可
具体关于Event Trigger怎么使用可以回顾之前的笔记:UGUI学习--进阶--EventTrigger事件触发器与RectTransformUtility
2.5.更多API
https://docs.unity3d.com/Packages/com.unity.textmeshpro@4.0/api/TMPro.TextMeshProUGUI.html
去官方手册中查看
三.3D文本控件
3D文本控件和UI文本控件差不多,只是它是可以当成是一个被渲染显示在场景上的3D物体,而不是一个UI。
可以在层级视图中右键后在3D Object中找到并创建出来
3D文本和UI文本的区别
1.组件不同
- 3D:TextMeshPro
- UI:TextMeshProUGUI
2.用途不同
- 3D:主要用于在3D场景中显示文字
- UI:主要用于在UI中显示文字,具备UI相关的一些属性
3.渲染方式
- 3D:直接渲染在场景上
- UI:通过UGUI的Canvas系统渲染
4.交互方式
- 3D:一般通关添加碰撞器进行碰撞检测判断交互
- UI:一般利用UI系统的交互规则,比如EventTrigger
如何选择?
- 文本需要与3D场景交互需要在3D场景上显示,选择3D文本 TextMeshPro, 就把他当成3D物体处理即可
- 文本需要在UI系统中使用,选择 TextMeshProUGUI, 把它当成UI组件使用即可
参数和脚本控制与UI文本控件差不多的
更多API可以去官网看:https://docs.unity3d.com/Packages/com.unity.textmeshpro@4.0/api/TMPro.TextMeshPro.html
四.字体资源相关
1.创建一个字体资源
我们可以去电脑上随便找一个字体(后缀为 .ttf 或 .otf 格式的文件),拖入到工程中
一般拖进来之后,我们放置在这个文件夹下面
选中字体,右键后按如图点击即可创建一个对应的字体资源了
创建好的字体资源,我们一般移动到这个文件夹下面
2.字体资源的参数设置
2.0.字体资源生成窗口
如果需要用到的字符已经提前知道并固定了,就可以用这种。或者有的艺术字需要专门用一个资源
- Sources Font File:用于生成资源的字体
- Sampling Point Size:采样点大小 设置用于生成字体纹理的字体大小(以磅为单位)
- Padding:生成的纹理中字符的间距(一般不用改它)
- Packing Method:包装方式 如何在字体纹理中调整字体布局
- Atlas Resolution:图集分辨率 如果只有ASCII字符,用512*512即可。 中文字体时,需要更大更多的图集。(比如1024*1024)
- Character Set:字符集 确定想要生成字体纹理的字符集
- Select Font Asset:选择对应的字体资源
- Character Sequence:当选择需要自己输入字体的的相关模式时,会出现
- Render Mode:渲染模式
(一般用SDF效果是最好的,SMOOTH其次,位图渲染最差)
- Get Kerning Pairs:用于在字体资源中获取字偶间距调整(Kerning)对。字偶间距调整是指根据相邻字符的组合来调整它们之间的间距,以实现更好的视觉效果和可读性
- Generate Font Atlas:生成字体图集
- Save:保存图集
- Save as...:另存为
2.1.基础信息设置
Scale:缩放 对字体进行缩放,1为原始大小,不缩放
Line Height:行高。表示每行文本的高度,通常是基于最大字形的高度计算的
Ascent Line: 上升线 字形中最高的点到基线的垂直距离。表示子母中最高部分(大写字母或某字符的上部)的位置 控制字形可以延伸到基线上方的最大距离。 它对应了线条的顶部
Cap Line:大写字母线 表示所有大写字母的顶部所处的水平线,通常略低于上升线 控制基线与大写字形顶部之间的距离
Mean Line:中线 表示小写字母的顶部所处的水平线,表示小写字母的标准高度 圆角字形的顶部有时会略高于中线
BaseLine:基线 所有字母字符所处的水平线,大多数字符都在这条线的上方,除了下延字符(g、y、q等) 控制基线的高度 基线是字符所在的水平线
Descent Line:下行线 字形中最低的点到基线的垂直距离,表示子母中最低部分的水平线(比如字母 g 的底部) 控制字形可以延伸到基线以下的最大距离
Underline Offset:下划线偏移 下划线相对基线的位置
Underline Thickness:下划线粗细 控制下划线的粗细
Strikethrough Offset:删除线偏移 控制删除线相对于基线的位置
Superscript Offset:上标偏移量 使上标文本相对基线偏移
Superscript Size:上标大小 相对于正常字体大小缩放上标文本
Subscript Offset:下表偏移量 是下表文本相对基线偏移
Subscript Size:下表大小 相对于正常字体大小缩放下表文本
Tab Width:指定TAB字符的宽度
2.2.生成设置 和 图集纹理
主要用来设置字体资源使用的纹理是动态生成的还是静态生成的
Source Font File: 字体文件
Atlas Population Mode: 纹理图集生成方式
Atlas Render Mode:字体渲染模式(和之前在资源生成窗口中的差不多,不记得了可以划上去看)
Sampling Point Size:采样点大小 设置用于生成字体纹理的字体大小(以磅为单位)(动态生成的时候有用)
Padding:填充 指定字体纹理中字符之间的间距(以像素为单位) 填充越大,过渡越平滑。
Atlas Width:图集宽
Atlas Height:图集高
Multi Atlas Textures:是否采用多图纹理 允许在字体资源中生成多个纹理图集(Atlas),而不仅仅是一个。这样可以更灵活地管理不同字符集或不同字体样式 提高性能和内存使用效率,尤其是在需要渲染大量不同字符的情况下建议使用
Clear Dynamic Data On Build: 在构建时清除动态生成的数据 这意味着如果你选择了动态字体模式,构建时会移除不再需要的动态字符数据,以节省内存 可以减少最终构建包的大小,确保只包含必要的字符数据
Font Atlas:生成字符资源时创建的字体纹理图集
Font Material:生成字体资源时创建的字体材质
2.3.字体粗细
Normal Weight:正常粗细 没有字体资源用时使用的常规字体粗细
Bold Weight:粗体粗细 没有字体资源用时使用的粗体字体粗细
Spacing Offset:间距偏移 使用普通文本样式时,在字符之间的间隙偏移
Bold Spacing:粗体间隙 没有指定粗体资源时,粗体文本字符之间的间距偏移
ltalic Style:斜体样式 400 - Regular > Italic Style 变体指定字体资源没有设置时 TMP将使用常规样式字体资源中的字符倾斜该字段中的量来达到斜体效果
Tab Multiple:多制表符 该值乘以字体空格符的宽度,用来表示制表符的大小
2.4.其他设置
备用字体资源:
可以创建相应文本资源的变体,从而在里面提供更多的字符。
Fallback List: 列出所有备用字体资产。 当主字体中缺少某些字符时,系统会按顺序尝试使用这些备用字体进行查找
Character Table 字符表:
如果有需要某个字符特殊的偏移间隔效果,可以来这里找到并给他单独设置
Glyph Table: 字形表:
和字符表作用差不多其实。这里还可以设置每个字符的采样位置。
- X、Y、W、H:字符在纹理中对应的位置范围
- W、H:字形的宽高
- BX、BY:相对基线的左上角位置(X方向,Y方向)
- AD:和下一个字符间隔的宽
- Scale:缩放大小
- Atlas Index:图集索引 在第几个图集中(开启了多图集时)
Glyph Adjustment Table: 字形调整表
字形调整表控制特定字符对之间的间距
- Adjustment Pair Search:调整对搜索
- Char 左和右:想要查找的字符
- ID 左和右:唯一标识符,一般显示左右字符的ASCII十进制编码
- OX 左和右:字符原点坐标X
- OY 左和右:字符原点坐标Y
- AX 左和右:字符的宽度
- Add New Glyph Adjustment Record: 添加新的字形调整记录
五.富文本标签
#region 知识点三 常用富文本标签
//1.换行<br>//2.文本加粗<b></b>//3.文本斜体<i></i>//4.加下划线<u></u>//5.改变大小<size=数值></size>//6.改变颜色<color=#RGBA 16进制></color>//7.对齐方式<align=left、center、right、justified、flush></align>//8.背景高亮<mark=#RGBA 16进制></mark>//9.透明度<alpha=#A 16进制>//10.全部大写<allcaps></allcaps>//11.改字体和材质(可选)<font="字体名" material="材质名"></font>//12.加上标(平方)<sup></sup>//13.加下标(化学式)<sub></sub>//14.超链接<link="链接"></link>
#endregion
更多的富文本标签可以去手册查看:https://docs.unity3d.com/Packages/com.unity.textmeshpro@4.0/manual/RichTextSupportedTags.html
六.总结
①TextMeshPro是比老Text控件渲染更加清晰,功能更加强大丰富的上位替代。我们需要手动导入与更新这它的相关文件
②TextMeshPro的UI控件可以调节多种颜色和字体,以及布局设置,还有文本在溢出时候如何处理。
③TextMeshPro的3D文本控件的参数和UI文本控件差不多,只是渲染,交互方式有所不同。
④我们可以将一个字体拖入工程后为他生成相应的字体资源以给TMP使用。如果提前知道了所有可能的字符,用静态的比较好。否则用动态的,动态的能够根据我们输入的字符,动态生成没有的字符到纹理中。
⑤TMP中同样可以使用富文本标签进行编辑