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和其他的东西。 下载完成后进入解压,注…...

SQL导出Excel支持正则脱敏
SQL to Excel Exporter 源码功能特性核心功能性能优化安全特性 快速开始环境要求安装运行 API 使用说明1. 执行SQL并导出Excel2. 下载导出文件3. 获取统计信息4. 清理过期文件 数据脱敏配置支持的脱敏类型脱敏规则配置示例 配置说明应用配置数据库配置 测试运行单元测试运行集成…...
解决transformers.adapters import AdapterConfig 报错的问题
需要安装 Adapter-Hub 的 transformers 分支,不是官方 transformers 库! pip install githttps://github.com/Adapter-Hub/transformers.git✅ 注意:这个命令会从 GitHub 下载源码并安装。你需要确保你的网络可以访问 GitHub,并且…...

【PCIe总线】-- inbound、outbound配置
PCI、PCIe相关知识整理汇总 【PCIe总线】 -- PCI、PCIe相关实现 由之前的PCIe基础知识可知,pcie的组成有:RC(根节点)、siwtch(pcie桥)、EP(设备)。 RC和EP,以及EP和EP能…...
深度学习习题3
1.训练神经网络过程中,损失函数在一些时期(Epoch)不再减小, 原因可能是: 1.学习率太低 2.正则参数太大 3.卡在了局部最小值 A1 and 2 B. 2 and 3 C. 1 and 3 D. 都是 2.对于分类任务,我们不是将神经网络中的随机权重…...
Vulkan 3D Tiles渲染器开发笔记1-脚手架搭建
一、项目简介 项目技术栈 CesiumNative + Dear ImGui + Vulkan 1.3 三维地理可视化系统 详细项目功能说明 1. 3DTiles渲染功能 实现完整的3DTiles格式解析与加载引擎支持LOD(Level of Detail)分层细节渲染可加载建筑模型、点云等3DTiles资产示例:加载城市级建筑3DTiles数据…...
Linux 的 find 命令使用指南
精通 Linux 的 find 命令:终极使用指南 在 Linux 系统中,find 命令是文件搜索的瑞士军刀,它能基于多种条件在目录树中精准定位文件。无论你是系统管理员还是开发者,掌握 find 都能极大提升工作效率。本文将深入解析 find 的核心用法,并附赠实用示例! 一、基础语法结构 …...

链表好题-多种实现
143. 重排链表 - 力扣(LeetCode) 这道题非常经典,很多大厂都作为面试题。 方法一:寻找中点翻转链表合并链表 class Solution { public:void reorderList(ListNode* head) {if (head nullptr) {return;}ListNode* mid middleNo…...
使用阿里云百炼embeddings+langchain+Milvus实现简单RAG
使用阿里云百炼embeddingslangchainMilvus实现简单RAG 注意测试时,替换其中的key、文档等 import os from langchain_community.embeddings import DashScopeEmbeddings from langchain_community.vectorstores import Milvus from langchain_text_splitters impor…...
Spring Boot 定时任务的使用
前言 在实际开发中,我们经常需要实现定时任务的功能,例如每天凌晨执行数据清理、定时发送邮件等。Spring Boot 提供了非常便捷的方式来实现定时任务,本文将详细介绍如何在 Spring Boot 中使用定时任务。 一、Spring Boot 定时任务简介 Spr…...

【MySQL】10.事务管理
1. 事务的引入 首先我们需要知道CURD操作不加控制会产生什么问题: 为了解决上面的问题,CURD需要满足如下条件: 2. 事务的概念 事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功&…...