TextMeshPro使用

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目录下

创建字体配置

不能直接使用字体文件,必须先基于字体文件创建配置

  • 创建字体配置
    有2种方法
    1. Project面板中在字体文件上右击->Create->TextMeshPro->Font Asset
      选中生成的配置后 -> 点击 Inspector 中的 Update Atlas Texture 打开 FontAssetCreator 窗口
      同方法2一样配置并生成字体纹理
    2. 菜单window -> TextMeshPro -> FontAssetCreator

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
      1. 放在 全局配置 Default Sprite Asset.Path 的目录下,注意可以是任意的 Resources,后续通过文件名引用
      2. 放在任意位置,直接把 SpriteAsset 拖到 Text 组件的 ExtraSettings.Sprite Asset
    • 勾选 RichText
    • 文本中使用 SpriteAsset
      • 使用默认SpriteAsset
        默认SpriteAsset是下列配置中第一个有值的,优先级从高到低
        1. Text 组件的 ExtraSettings.Sprite Asset
        2. 全局配置 中的Default Sprite Asset
      • 使用非默认SpriteAsset <sprite=“assetName” name=“spriteName”>
        SpriteAsset必须放在 全局配置 Default Sprite Asset.Path 的目录下
    • 你会发现表情的中心点对齐到文本起始点
      可以通过调整表情配置中的 Global Offsets & Scale 来对齐

常见效果实现

  • 颜色渐变
    勾选 ColorGradient
    配置渐变颜色
  • 阴影效果
    勾选 Underlay
  • 描边效果
    勾选 Glow
  • 文本使用字体A,逗号想用字体B
    • 创建字体A的配置
    • 创建字体B的配置
      Atlas Population Mode 设为 Static,
      Character Set 中只添加逗号
      Fallback Font Assets 中添加字体A的配置
    • 在 Text 组件中,Font Asset 关联字体B的配置
  • 表情
    参考 表情
  • 艺术字
    参考 表情
<think>我们正在讨论如何使用TextMeshPro(TMP)来解决Unity中Text字体缩小后模糊的问题,并进一步了解TextMeshPro使用教程和入门指南。根据引用[1]和[2],我们可以知道:-有一个工具可以将Unity的传统Text组件升级为TextMeshPro组件(引用[1])-使用TextMeshPro需要导入TMPEssentialResources(引用[2])因此,我们的回答将围绕如何安装、设置和使用TextMeshPro展开,并提供一些基础教程和示例。#TextMeshPro使用教程和入门指南TextMeshPro(TMP)是Unity官方推荐的文本渲染解决方案,它使用有符号距离场(SDF)技术,能够在任意缩放比例下保持清晰锐利的边缘,特别适合解决传统Text组件在缩小后模糊的问题。##一、安装与基础设置###步骤1:导入TextMeshPro1.打开Unity,进入`Window>PackageManager`2.在PackageManager中,找到并选择`TextMeshPro`3.点击右下角的`Install`按钮进行安装###步骤2:导入TMP基础资源(重要!)安装完成后,必须导入TMP的基础资源:```csharpWindow>TextMeshPro>ImportTMPEssentialResources```系统会提示覆盖现有资源,选择“确定”即可(引用[2])。>⚠️注意:导入后需要重启Unity才能生效(引用[2])。##二、创建TextMeshPro文本###方法1:直接创建1.在Hierarchy视图中右键2.选择`UI>Text-TextMeshPro`(创建UI文本)或`3DObject>TextMeshProText`(创建3D文本)###方法2:替换现有Text组件若要将现有UnityUIText替换为TextMeshPro:1.选中GameObject2.右键点击Inspector中的Text组件3.选择`ReplacewithTextMeshProText`>提示:可使用升级工具批量替换(引用[1]提供的工具)##三、TextMeshPro组件详解TextMeshPro组件包含以下关键属性:|属性组|关键设置|作用||--------|----------|------||**文本内容**|TextInputBox|支持富文本标签如`<b>粗体</b>`||**字体设置**|FontAsset|使用SDF字体文件(.asset)|||MaterialPreset|字体材质(控制描边/发光等)||**外观**|FontSize|基础字号(推荐使用AutoSize)|||VertexColor|文本顶点颜色(支持渐变)||**特效**|EnableRaycastTarget|是否接受射线检测(UI必备)|||ExtraSettings>Outline|添加描边(厚度和颜色)|##四、创建自定义字体###步骤1:准备字体文件将.ttf或.otf字体文件拖入Unity项目###步骤2:生成SDF字体1.选中字体文件,在Inspector中点击`GenerateFontAtlas`2.调整参数:-AtlasResolution:4096(清晰度越高内存占用越大)-Padding:5(防止字符边缘裁剪)-CharacterSet:选择需要的字符集(推荐Unicode)3.点击`GenerateFontAtlas`生成###步骤3:创建材质1.右键字体资源>Create>Material2.可调整材质参数实现特效:-描边:`Outline>Thickness`设置厚度-发光:`Glow>Color`和`Offset`##五、代码控制示例```csharpusingTMPro;//必须引入命名空间publicclassTextController:MonoBehaviour{publicTMP_TexttmpText;voidStart(){//设置文本内容(支持富文本)tmpText.text="Hello<color=#ff0000>World</color>!";//动态修改字体大小tmpText.fontSize=24;//启用自动调整(最小12,最大24)tmpText.enableAutoSizing=true;tmpText.fontSizeMin=12;tmpText.fontSizeMax=24;}}```##六、性能优化技巧1.**共享材质**:相同样式的文本共享材质实例2.**字体图集合并**:通过`Window>TextMeshPro>FontAssetCreator`合并常用字3.**禁用不必要特效**:如描边、阴影在非必要时关闭4.**静态文本标记**:不变化的文本标记为Static>📊性能数据:TextMeshPro在渲染1000个字符时比传统Text快2倍(Unity官方测试)##七、常见问题解决###问题1:文本显示为方块(□)-**原因**:字体图集缺少对应字符-**解决**:重新生成字体图集并包含所需字符###问题2:特效不显示-**检查步骤**:1.材质是否正确设置特效参数2.Canvas渲染模式是否为`ScreenSpace-Overlay`(某些特效需要特定渲染模式)---§§相关问题§§1.如何给TextMeshPro文本添加动态渐变效果?2.TextMeshPro的超链接功能如何实现?3.在多语言项目中如何配合Localization插件使用TextMeshPro?(引用[3])4.如何用DOTween实现TextMeshPro文本的动画?(引用[4])5.TextMeshPro在VR项目中有什么特殊优化技巧?</think># TextMeshPro 使用教程与入门指南 TextMeshPro (TMP) 是Unity官方推荐的文本渲染解决方案,它使用**有符号距离场(SDF)** 技术,能完美解决传统Text组件缩小后模糊的问题。以下是完整使用指南: ## 一、安装与基础设置 ### 1. 安装TextMeshPro ```csharp // 安装步骤: 1. Window > Package Manager 2. 搜索并安装 "TextMesh Pro" 3. 安装完成后:Window > TextMesh Pro > Import TMP Essential Resources ``` > 必须导入基础资源才能正常使用(引用[2])[^2] ### 2. 创建TextMeshPro文本 ```csharp // 两种创建方式: 1. UI创建:右键Hierarchy > UI > Text - TextMeshPro 2. 3D文本:右键Hierarchy > 3D Object > TextMeshPro Text ``` ## 二、核心功能详解 ### 1. 字体导入与配置 ```csharp // 字体处理流程: 1. 拖拽.ttf/.otf字体到Unity 2. 右键字体文件 > Create > TextMesh Pro > Font Asset 3. 在Font Asset Creator中: - Atlas Resolution: 4096 (高清字体) - Character Set: Unicode或自定义字符集 - 点击Generate Font Atlas生成 ``` ### 2. 文本组件属性 | 属性组 | 关键设置 | 作用 | |--------|----------|------| | **文本内容** | Text Input Box | 支持富文本标签如`<b>粗体</b>` | | **字体设置** | Font Asset | 使用创建的SDF字体 | | | Material Preset | 字体材质(控制描边/发光等) | | **外观** | Font Size | 基础字号 | | | Auto Size | 启用自动调整大小 | | **特效** | Enable Raycast Target | 是否接受UI事件 | | | Extra Settings > Outline | 添加描边效果 | ### 3. 富文本标签示例 ```html // 支持的富文本语法: <b>粗体文本</b> <i>斜体文本</i> <color=#FF0000>红色文本</color> <size=24>大号字体</size> <material=2>使用材质2</material> ``` ## 三、代码控制示例 ### 基础文本控制 ```csharp using TMPro; // 必须引入命名空间 public class TMPController : MonoBehaviour { public TMP_Text tmpText; void Start() { // 设置文本内容 tmpText.text = "Hello <color=green>TextMeshPro</color>!"; // 动态修改字体大小 tmpText.fontSize = 36; // 启用自动调整 tmpText.enableAutoSizing = true; tmpText.fontSizeMin = 12; tmpText.fontSizeMax = 48; } } ``` ### 动态特效实现 ```csharp // 添加文字描边 tmpText.fontMaterial.EnableKeyword("OUTLINE_ON"); tmpText.outlineWidth = 0.2f; tmpText.outlineColor = Color.blue; // 文字渐变效果(需创建特殊材质) tmpText.colorGradient = new VertexGradient( Color.red, Color.yellow, Color.green, Color.blue ); ``` ## 四、性能优化技巧 1. **字体图集合并**: ```csharp Window > TextMeshPro > Font Asset Creator ``` 合并多个字体到单个图集,减少draw call 2. **材质共享**: - 相同样式的文本使用相同材质实例 - 通过Material Preset创建预设 3. **字符集优化**: - 仅包含项目实际使用的字符 - 避免使用"Unicode"字符集(节省内存) 4. **静态文本处理**: - 不变化的文本标记为Static - 启用Occlusion Culling ## 五、传统Text升级到TMP ### 使用升级工具(引用[1]) 1. 下载升级工具: ```csharp https://gitcode.com/gh_mirrors/un/UnityTextToTextMeshProUpgradeTool ``` 2. 导入Unity项目 3. 执行:Window > TextMeshPro > Upgrade Project to TextMeshPro 4. 批量替换所有Text组件 > 升级后需重新配置字体资源(引用[1])[^1] ## 六、与UI系统集成 ### Canvas Scaler配置 ```csharp // 优化多分辨率适配: Canvas Scaler设置: - UI Scale Mode: Scale With Screen Size - Reference Resolution: 1920x1080 (设计分辨率) - Screen Match Mode: Match Width or Height (0.5) ``` ### 动画集成(引用[4]) ```csharp // 使用DOTween制作动画 using DG.Tweening; public class TextAnimator : MonoBehaviour { public TMP_Text text; public void AnimateText() { text.DOFade(0, 1f).From(); // 渐入效果 text.transform.DOScale(1.2f, 0.5f).SetLoops(2, LoopType.Yoyo); // 缩放动画 } } ``` ## 七、常见问题解决 **问题:文本显示为方块(□)** - 原因:字体图集缺少该字符 - 解决:重新生成字体图集并包含所需字符 **问题:特效不显示** - 检查材质是否启用对应功能(如OUTLINE_ON) - 确认Canvas渲染模式为Screen Space-Overlay > 更多技巧:官方文档 https://docs.unity3d.com/Packages/com.unity.textmeshpro@3.0/manual/index.html ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值