国外域名。国内网站,wordpress文章中添加视频,企业网站建设怎么选择空间,徐州营销网站建设也许你也曾被游戏中的对话系统深深吸引#xff0c;那些精心设计的对白、鲜活的角色配音、甚至是简单的文字对话#xff0c;往往能让玩家产生强烈的代入感和情感共鸣。如果你正在开发一款游戏#xff0c;或者计划为你的项目加入一个引人入胜的对话系统#xff0c;那么 Unity… 也许你也曾被游戏中的对话系统深深吸引那些精心设计的对白、鲜活的角色配音、甚至是简单的文字对话往往能让玩家产生强烈的代入感和情感共鸣。如果你正在开发一款游戏或者计划为你的项目加入一个引人入胜的对话系统那么 Unity 中的 TextMesh Pro (TMP) 是你不可忽视的利器。
在这篇博客中我们将深入探讨如何利用 TMP 实现一个灵活而精致的对话系统。 前置知识 一.富文本
1.定义
富文本Rich Text是指一种支持多种格式、样式和布局的文本内容区别于普通的纯文本。它允许在文本中包含不同的字体、颜色、大小、加粗、斜体、下划线、列表、超链接等元素从而提供更加丰富和多样的视觉呈现。
显著特征标签的作用域和嵌套
标签的作用域是用来定义它影响文本的范围通常情况下添加的标签会影响它之后的所有文本。
例如We are bnot/b friend 此处的字体加粗格式只会应用在not字符串。
2.Unity中的富文本
在 Unity 中富文本通常通过 Text 组件或 TextMeshPro 组件来实现。Unity 允许开发者在文本中嵌入HTML-like 标签以达到不同的视觉效果。
该标记系统受 HTML 的启发但并不打算与标准 HTML 严格兼容。基本思想是可以将文本的一部分包含在一对匹配标签内。 ——摘自unity文档 TMP支持非常多样的富文本标签
二.正则表达式
正则表达式Regular Expression简称Regex是一种用于描述字符串匹配规则的工具。它允许你通过特定的语法来定义字符串的模式从而用于查找、匹配、替换、验证或分割字符串。正则表达式广泛应用于文本处理、数据验证、日志分析、编程语言的词法分析等领域。
在 Unity 中正则表达式Regular Expressions简称 Regex通常用于处理和分析字符串数据尤其是当你需要在字符串中查找、替换、验证或者提取特定模式的信息时正则表达式显得非常有用。
在我们的实验中将会使用正则表达式来完成 字符匹配,字符替换,字符删除等相关操作。实现基于个性化需求的富文本格式。 三.TextMeshPro
在 Unity 中TextMeshProUGUI 是用于在 UGUI 系统中显示文本的组件类它是 TextMesh Pro 插件的一部分。TextMesh Pro 是 Unity 的一种高级文本渲染技术提供比标准 Unity UI 文字渲染更好的字体效果、更高的性能和更多的文本样式定制功能。
我们可以打开TextMeshPro-Text组件的脚本其实这个组件就是TextMeshProUGUI类实现的。
我们可以写一个继承TextMeshProUGUI 的子类挂载到一个UI物体上发现效果和我们直接创建一个TextMeshPro是一样的效果。
public class AdvancedText : TextMeshProUGUI
{} 1.关键变量概念
1*preprocesser预处理器
preprocesser 是 TextMesh Pro 内部的一个核心组成部分它的主要作用是将文本内容转换为适合渲染的格式并进行一些必要的预计算和优化。预处理器通常在文本内容或样式更新时运行确保文本的渲染更加高效和准确。
主要作用 文本解析与标记处理TextMesh Pro 支持 富文本Rich Text这意味着它可以解析并渲染包含特定标签如 b, i, size24 等的文本。预处理器负责解析这些富文本标签并将其转化为 样式信息以便在后续的渲染过程中使用 字符映射与字体纹理TextMesh Pro 使用 位图字体 或 动态字体 来渲染字符。预处理器会根据文本内容查找每个字符对应的 字符映射然后从 字体纹理图集 中提取出相应的字符纹理。 文本布局与排版预处理器还负责进行 文本布局 和 排版如换行、字符间距、行间距等。TextMesh Pro 支持复杂的排版效果比如自动换行、文本缩放、字母和行的对齐等预处理器会根据这些规则来决定每个字符的位置
2*characterinfo
CharacterInfo 主要用于存储与单个字符相关的详细信息。它通常表示一个字符包括其位置、大小、样式、纹理等在渲染过程中的一些元数据。每个 CharacterInfo 对象包含了该字符的所有渲染信息包括它的 位置、宽度、高度、基线、字符的材质信息 等。
在 TMP 中CharacterInfo 是非常基础的单位表示一个单独字符的几何数据。它通常用于生成每个字符的渲染网格并帮助计算字符之间的距离、对齐等。
3*textinfo
TextInfo 是 TMP 渲染过程中更高级别的结构体它包含了整个文本块的详细信息。TextInfo 汇总了文本中所有字符的信息并对整个文本的渲染过程进行更广泛的管理。它不仅包含了字符信息还包括文本的布局、材质、字体、字体图集等各种信息。
TextInfo 是对文本内容的高层次表示它将所有字符、行和字词的信息都组织起来使得 TMP 可以更高效地处理文本渲染、样式应用和布局计算等操作。它负责将 CharacterInfo 集合在一起形成一个完整的文本渲染结构。 注意
CharacterInfo 是 TextInfo 的组成部分TextInfo 是一个包含多个 CharacterInfo 对象的结构体。在渲染过程中TMP 会通过 TextInfo.textElementInfo[] 数组来访问所有字符的详细信息而每个 CharacterInfo 则存储一个字符的具体几何信息如顶点位置、纹理等。
TextInfo 包含了整个文本块的布局信息包括字符的数量、排版、字体样式而 CharacterInfo 则专注于每个字符的具体渲染数据。 2.TMP运作原理 初始化阶段当你第一次创建或修改 TextMeshProUGUI 组件时预处理器会解析文本内容并创建对应的 字符网格、材质 和 字体图集。此时会加载字体纹理图集并计算所有字符的排列。 文本内容变更时每当你更新文本内容例如修改 text 属性时TextMesh Pro 会调用预处理器preprocessor重新解析新的文本。预处理器会根据新的文本内容生成新的字符网格、更新字符的字体材质重新计算布局。 渲染阶段在渲染过程中TextMesh Pro 会根据预处理器生成的网格数据在 GPU 上渲染文本。如果文本内容没有发生变化TextMesh Pro 会尽可能复用现有的网格和材质从而提高渲染效率. 实现需求
我们将一起实现一个完备的对话系统包含的功能如下
1.自定义富文本格式的应用
2.淡入淡出动画效果
3.打字机动画效果
4.头缀注释
5.多样回答选择
在你的Unity编辑器项目中导入TMP资源至此我们完成了简单的知识介绍和前置准备。
本篇完