TextMeshPro 是 Unity 的最终文本解决方案
是 Unity UI Text 和旧版 Text Mesh 的完美替代方案
文档: http://digitalnativestudios.com/textmeshpro/docs/
全局配置
默认会创建一个全局配置,位于 Assets/TextMesh Pro/Resources/TMP Settings.asset
这个配置必须放在 Resources 目录下,且名字必须是 TMP Settings.asset
- Default Font Asset
默认字体配置,当Text没有指定字体或所需字符不在配置的字体中时都会使用默认字体 - Path
字体存放的路径,必须在Resources目录下,把创建的字体配置都放在这里
只要把字体配置放这里就行,字体还是可以放在其它地方
注意可以放在任意Resource目录下 - Fallback Font Assets
全局备用字体,就是某个字体如果找不到字符,并且在本字体的备用字体列表中也找不到字符时,就会在全局备用字体列表中查找 - Default Sprite Asset
- Default Sprite Asset
默认表情配置,在 RichText 中可以省略 sprite=“xxx”,直接用<index=0> - Path
表情配置存放路径,必须在 Resources 目录下,把创建的表情配置都放在这里
只要配置放这里就行,表情图片可以放在其它地方
注意可以放在任意Resource目录下
- Default Sprite Asset
创建字体配置
不能直接使用字体文件,必须先基于字体文件创建配置
- 创建字体配置
有2种方法- Project面板中在字体文件上右击->Create->TextMeshPro->Font Asset
选中生成的配置后 -> 点击 Inspector 中的 Update Atlas Texture 打开 FontAssetCreator 窗口
同方法2一样配置并生成字体纹理 - 菜单window -> TextMeshPro -> FontAssetCreator
- 参考 FontAssetCreator配置
- 点击 Generate Font Atlas 生成字体纹理
- 点击 Save 保存字体配置
- Project面板中在字体文件上右击->Create->TextMeshPro->Font Asset
FontAssetCreator配置
参考 http://digitalnativestudios.com/textmeshpro/docs/font/
- Source Font File 字体文件,该文件只用于生成纹理,不会被打包
- Padding 字体纹理中,文本间隔
- FontSize 字体纹理中每个字的大小
- Character Set 配置要添加到纹理中的字符,其它的会使用默认字体
注意只有当字体配置中 Atlas Population Mode 设为 Static 时,才只添加 Character Set 中的字符到纹理中,并且字体文件不会打进最终包中,
如果设为 Dynamic 则不需要配置 Character Set,因为会把字体打进最终包中,根据需要动态添加字符到Character Set中并自动生成纹理
配置示例- Custom Range 32-126,150,161-255
- Unicode Range(Hex) 20-7E,A1-FF
- Custom Characters 01234567890 ABCDEFGabcdefg 中间包含空格
- Render Mode 字体纹理生成模式,一般用默认就行
- Get Kerning Pairs 从字体文件中拷贝特殊字符的间距信息,只有少数字体包含该信息
- Generate Font Atlas 如果 Character Set 有修改,则点击重新生成纹理,然后才能保存
- Save 生成并保存字体配置和纹理
字体配置FontAsset
参考 http://digitalnativestudios.com/textmeshpro/docs/font/
字体配置统一放在 全局配置 的路径下,方便RichText引用
- Face Info
字符信息,主要是排版相关参数
- Line Height 行高
- Ascent Line baseline 到字符最上沿
- Descent Line 负值,baseline 到字符最下沿
- Cap Line 大写字母间距
- Mean Line
- Baseline 基准线,一般为0
- Underline Offset
- Underline Thickness
- Strickthrough Offset
- Superscript Offset
- Superscript Size
- Tab Width
- Generation Settings
字体信息,引用的字体文件,以及如何生成字符纹理- Source Font File 引用的字体文件
- Atlas Population Mode 字符纹理生成方式
- Static 静态,只添加 Character Set 中的字符到纹理中,并且字体文件不会被打包
- Dynamic 动态,字体文件会被打包,根据需要动态添加字符到Character Set中并自动生成纹理
- Atlas Render Mode
- Font Weights
用于配置粗体和斜体的字符显示
纵向的代表粗体级别,横向代表该粗体级别下,正常和斜体的字体
比如 你可以导入粗字体,并创建对应的配置,然后设置给 [800-Heavy,Regular Typeface],这样当 Text 组件设置为粗体后将用该字体显示,如果没有设置,则会使用下面的参数对当前字体进行处理来生成伪粗体- Normal Weight
- Bold Weight
- Fallback Font Assets
备用字体列表,当需要的字符不在当前字体中时,会搜索备用字体列表,还没有则用unity默认字体
用这个可以实现一些特殊效果,比如我使用字体A,但觉得逗号不好看,想使用字体B的逗号
参考 常见效果实现 - Character Table
当前字符纹理中包含的字符
可通过点击上方的 Update Atlas Texture 打开 FontAssetCreator 窗口重新生成
也可以点击某个字符信息进入编辑模式 - Glyph Table
字符纹理中每个字符的纹理信息
点击某个字符信息可进入编辑模式 - Glyph Adjustment Table
相邻字符的额外布局信息,可用于高级排版
比如 A 和 V 2个字符相邻时,可以调整布局信息使之靠近点- OX 水平偏移
- OY 垂直偏移
- AX 水平间距
使用
主要提供了2个组件用于渲染文本
-
TextMeshPro
配合 MeshRenderer 在场景中渲染- 快速添加对象
GameObject -> 3D Object -> Text-TextMeshPro
- 快速添加对象
-
TextMeshProUGUI
配合 CanvasRenderer 在UGUI中渲染- 快速添加对象
GameObject -> UI -> Text-TextMeshPro
- 快速添加对象
Text组件
shader效果参考 http://digitalnativestudios.com/textmeshpro/docs/shaders/
- ColorGradient
颜色渐变 - Underlay
阴影效果 - Glow
描边效果 - Lighting
光学效果
RichText
参考 http://digitalnativestudios.com/textmeshpro/docs/rich-text/
表情
允许通过 RichText 嵌入 Sprite
- 从美术获取包含多个表情的图片
- 图片导入设置
TextureType = Sprite(2D and UI)
Sprite Mode = Multiple
点击 Sprite Editor 划分好各个Sprite - 创建SpriteAsset
Project 面板选中图片右击 -> Create -> TextMeshPro -> Sprite Asset
生成这个配置后,图片你可以改成其它类型,因为每个Sprite的信息已经记录在SpriteAsset中 - 在Text中使用
- 引用 SpriteAsset
- 放在 全局配置 Default Sprite Asset.Path 的目录下,注意可以是任意的 Resources,后续通过文件名引用
- 放在任意位置,直接把 SpriteAsset 拖到 Text 组件的 ExtraSettings.Sprite Asset
- 勾选 RichText
- 文本中使用 SpriteAsset
- 你会发现表情的中心点对齐到文本起始点
可以通过调整表情配置中的 Global Offsets & Scale 来对齐
- 引用 SpriteAsset