Unity功能模块一对话系统(1)前置准备
也许你也曾被游戏中的对话系统深深吸引,那些精心设计的对白、鲜活的角色配音、甚至是简单的文字对话,往往能让玩家产生强烈的代入感和情感共鸣。如果你正在开发一款游戏,或者计划为你的项目加入一个引人入胜的对话系统,那么 Unity 中的 TextMesh Pro (TMP) 是你不可忽视的利器。
在这篇博客中,我们将深入探讨如何利用 TMP 实现一个灵活而精致的对话系统。
前置知识
一.富文本
1.定义
富文本(Rich Text)是指一种支持多种格式、样式和布局的文本内容,区别于普通的纯文本。它允许在文本中包含不同的字体、颜色、大小、加粗、斜体、下划线、列表、超链接等元素,从而提供更加丰富和多样的视觉呈现。
显著特征:标签的作用域和嵌套
标签的作用域是用来定义它影响文本的范围,通常情况下添加的标签会影响它之后的所有文本。
例如:We are <b>not</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>,<size=24>等)的文本。预处理器负责解析这些富文本标签,并将其转化为 样式信息,以便在后续的渲染过程中使用 -
字符映射与字体纹理: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资源,至此,我们完成了简单的知识介绍和前置准备。
本篇完
相关文章:
Unity功能模块一对话系统(1)前置准备
也许你也曾被游戏中的对话系统深深吸引,那些精心设计的对白、鲜活的角色配音、甚至是简单的文字对话,往往能让玩家产生强烈的代入感和情感共鸣。如果你正在开发一款游戏,或者计划为你的项目加入一个引人入胜的对话系统,那么 Unity…...
strrchr的概念和使用案例
strrchr 是 C 语言标准库中的一个函数,用于在字符串中查找最后一次出现的字符,并返回指向该字符的指针。 概念: strrchr 函数在给定的字符串中从末尾开始搜索指定的字符,返回一个指向该字符最后一次出现的指针。如果字符在字符串…...
缓存管理自动化:JuiceFS 企业版 Cache Group Operator 新特性发布
近期,JuiceFS 企业版推出了 Cache Group Operator,用于自动化创建和管理缓存组集群。Operator 是一种简化 Kubernetes 应用管理的工具,它能够自动化应用程序的生命周期管理任务,使部署、扩展和运维更加高效。 在推出 Operator 之前…...
C++ 并发专题 - 实现一个线程安全的队列
一:概述 本文利用 C 标准库中的多线程、条件变量、互斥锁等工具来实现一个线程安全的队列,并且使用多个线程来向队列中添加和获取数据。 二:实现过程: #include <iostream> #include <queue> #include <mutex&g…...
SQL 基础教程
SQL 是用于访问和处理数据库的标准的计算机语言。 在本教程中,您将学到如何使用 SQL 访问和处理数据系统中的数据,这类数据库包括:Oracle, Sybase, SQL Server, DB2, Access 等等。 SQL 是用于访问和处理数据库的标准的计算机语言。 什么是…...
【源码】Sharding-JDBC源码分析之SQL中影子库ShadowSQLRouter路由的原理
Sharding-JDBC系列 1、Sharding-JDBC分库分表的基本使用 2、Sharding-JDBC分库分表之SpringBoot分片策略 3、Sharding-JDBC分库分表之SpringBoot主从配置 4、SpringBoot集成Sharding-JDBC-5.3.0分库分表 5、SpringBoot集成Sharding-JDBC-5.3.0实现按月动态建表分表 6、【…...
雷池 WAF 搭配阿里云 CDN 使用教程
雷池 WAF(Web Application Firewall)是一款强大的网络安全防护产品,通过实时流量分析和精准规则拦截,有效抵御各种网络攻击。在部署雷池 WAF 的同时,结合阿里云 CDN(内容分发网络)可以显著提升网…...
3.银河麒麟V10 离线安装Nginx
1. 下载nginx离线安装包 前往官网下载离线压缩包 2. 下载3个依赖 openssl依赖,前往 官网下载 pcre2依赖下载,前往Git下载 zlib依赖下载,前往Git下载 下载完成后完整的包如下: 如果网速下载不到请使用网盘下载 通过网盘分享的文件…...
【模块一】kubernetes容器编排进阶实战之kubernetes 资源限制
kubernetes 资源限制 kubernetes中资源限制概括 1.如果运行的容器没有定义资源(memory、CPU)等限制,但是在namespace定义了LimitRange限制,那么该容器会继承LimitRange中的 默认限制。 2.如果namespace没有定义LimitRange限制,那么该容器可…...
【开源】一款基于SpringBoot的智慧小区物业管理系统
一、下载项目文件 项目文件源码链接:https://pan.quark.cn/s/3998d958e182如出现网盘空间不够存的情况!!!解决办法是先用夸克手机app注册,然后保存上方链接,就可以得到1TB空间了!!&…...
Goland:专为Go语言设计的高效IDE
本文还有配套的精品资源,点击获取 简介:Goland是JetBrains公司开发的集成开发环境(IDE),专为Go语言设计,提供了高效的代码编辑、强大的调试工具和丰富的项目管理功能。其智能代码补全、强大的调试与测试支…...
云手机与Temu矩阵:跨境电商运营新引擎
云手机与 Temu 矩阵结合的基础 云手机技术原理 云手机基于先进的 ARM 虚拟化技术,在服务器端运行 APP。通过在服务器上利用容器虚拟化软件技术,能够虚拟出多个独立的手机操作系统实例,每个实例等同于一部单独的手机,可独立运行各…...
仓颉编程笔记1:变量函数定义,常用关键字,实际编写示例
本文就在网页版上体验一下仓颉编程,就先不下载它的SDK了 基本围绕着实际摸索的编程规则来写的 也没心思多看它的文档,写的不太明确,至少我是看的一知半解的 文章提供测试代码讲解、测试效果图: 目录 仓颉编程在线体验网址&…...
Python小括号( )、中括号[ ]和大括号{}代表什么
python语言最常见的括号有三种,分别是:小括号( )、中括号[ ]和大括号也叫做花括号{ },分别用来代表不同的python基本内置数据类型。 小括号():struct结构体,但不能改值 python中的小括号( )&am…...
React里使用lodash工具库
安装 使用命令 npm install lodash 页面引入 常见的引入方式 引入整个lodash对象: import _ from lodash按名称引入特定的函数: import { orderBy } from "lodash"; tips: 这两种引入方式都会引入整个lodash库, 体积大&#x…...
【免费分享】mysql笔记,涵盖查询、缓存、存储过程、索引,优化。
概括 本篇笔记涵盖基础查询、视图、存储过程、函数、索引、优化、分库分表。适合在学完mysql后进行时常观看。下面展示部分内容。如果需要可以在文章底部的链接进行下载查看。 简介 数据库 数据库:DataBase,简称 DB,存储和管理数据的仓库…...
C语言-数据结构-图
目录 一,图的概念 1,图的定义 2,图的基本术语 二,图的存储结构 1,邻接矩阵 2,邻接表 三,图的遍历 1,深度优先搜索 2,广度优先搜素 四,生成树和最小生成树 1,生成树的特点: 2,最小生成树 (1)普利姆算法Prim (2)普里姆算法思路 五,最短路径 1,Dijkstra算法 2,Fl…...
android sqlite 数据库简单封装示例(java)
sqlite 数据库简单封装示例,使用记事本数据库表进行示例。 首先继承SQLiteOpenHelper 使用sql语句进行创建一张表。 public class noteDBHelper extends SQLiteOpenHelper {public noteDBHelper(Context context, String name, SQLiteDatabase.CursorFactory fact…...
“宠物服务的跨平台整合”:多设备宠物服务平台的实现
2.1 SSM框架介绍 本课题程序开发使用到的框架技术,英文名称缩写是SSM,在JavaWeb开发中使用的流行框架有SSH、SSM、SpringMVC等,作为一个课题程序采用SSH框架也可以,SSM框架也可以,SpringMVC也可以。SSH框架是属于重量级…...
关于最新MySQL9.0.1版本zip自配(通用)版下载、安装、环境配置
一、下载 从MySQL官网进行下载MySQL最新版本,滑到页面最下面点击社区免费版,(不是企业版) 点击完成后选择自己想要下载的版本,选择下载zip压缩,不用debug和其他的东西。 下载完成后进入解压,注…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
