当前位置: 首页 > news >正文

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 内部的一个核心组成部分,它的主要作用是将文本内容转换为适合渲染的格式,并进行一些必要的预计算和优化。预处理器通常在文本内容或样式更新时运行,确保文本的渲染更加高效和准确。

主要作用
  1. 文本解析与标记处理:TextMesh Pro 支持 富文本(Rich Text),这意味着它可以解析并渲染包含特定标签(如 <b><i><size=24> 等)的文本。预处理器负责解析这些富文本标签,并将其转化为 样式信息,以便在后续的渲染过程中使用

  2. 字符映射与字体纹理:TextMesh Pro 使用 位图字体 或 动态字体 来渲染字符。预处理器会根据文本内容查找每个字符对应的 字符映射,然后从 字体纹理图集 中提取出相应的字符纹理。

  3. 文本布局与排版:预处理器还负责进行 文本布局 和 排版,如换行、字符间距、行间距等。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运作原理

  1. 初始化阶段:当你第一次创建或修改 TextMeshProUGUI 组件时,预处理器会解析文本内容,并创建对应的 字符网格材质字体图集。此时会加载字体纹理图集,并计算所有字符的排列。

  2. 文本内容变更时:每当你更新文本内容(例如修改 text 属性)时,TextMesh Pro 会调用预处理器preprocessor重新解析新的文本。预处理器会根据新的文本内容生成新的字符网格、更新字符的字体材质,重新计算布局。

  3. 渲染阶段:在渲染过程中,TextMesh Pro 会根据预处理器生成的网格数据在 GPU 上渲染文本。如果文本内容没有发生变化,TextMesh Pro 会尽可能复用现有的网格和材质,从而提高渲染效率.


实现需求

我们将一起实现一个完备的对话系统,包含的功能如下:

1.自定义富文本格式的应用

2.淡入淡出动画效果

3.打字机动画效果

4.头缀注释

5.多样回答选择

在你的Unity编辑器项目中导入TMP资源,至此,我们完成了简单的知识介绍和前置准备。

本篇完

相关文章:

Unity功能模块一对话系统(1)前置准备

也许你也曾被游戏中的对话系统深深吸引&#xff0c;那些精心设计的对白、鲜活的角色配音、甚至是简单的文字对话&#xff0c;往往能让玩家产生强烈的代入感和情感共鸣。如果你正在开发一款游戏&#xff0c;或者计划为你的项目加入一个引人入胜的对话系统&#xff0c;那么 Unity…...

strrchr的概念和使用案例

strrchr 是 C 语言标准库中的一个函数&#xff0c;用于在字符串中查找最后一次出现的字符&#xff0c;并返回指向该字符的指针。 概念&#xff1a; strrchr 函数在给定的字符串中从末尾开始搜索指定的字符&#xff0c;返回一个指向该字符最后一次出现的指针。如果字符在字符串…...

缓存管理自动化:JuiceFS 企业版 Cache Group Operator 新特性发布

近期&#xff0c;JuiceFS 企业版推出了 Cache Group Operator&#xff0c;用于自动化创建和管理缓存组集群。Operator 是一种简化 Kubernetes 应用管理的工具&#xff0c;它能够自动化应用程序的生命周期管理任务&#xff0c;使部署、扩展和运维更加高效。 在推出 Operator 之前…...

C++ 并发专题 - 实现一个线程安全的队列

一&#xff1a;概述 本文利用 C 标准库中的多线程、条件变量、互斥锁等工具来实现一个线程安全的队列&#xff0c;并且使用多个线程来向队列中添加和获取数据。 二&#xff1a;实现过程&#xff1a; #include <iostream> #include <queue> #include <mutex&g…...

SQL 基础教程

SQL 是用于访问和处理数据库的标准的计算机语言。 在本教程中&#xff0c;您将学到如何使用 SQL 访问和处理数据系统中的数据&#xff0c;这类数据库包括&#xff1a;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&#xff08;Web Application Firewall&#xff09;是一款强大的网络安全防护产品&#xff0c;通过实时流量分析和精准规则拦截&#xff0c;有效抵御各种网络攻击。在部署雷池 WAF 的同时&#xff0c;结合阿里云 CDN&#xff08;内容分发网络&#xff09;可以显著提升网…...

3.银河麒麟V10 离线安装Nginx

1. 下载nginx离线安装包 前往官网下载离线压缩包 2. 下载3个依赖 openssl依赖&#xff0c;前往 官网下载 pcre2依赖下载&#xff0c;前往Git下载 zlib依赖下载&#xff0c;前往Git下载 下载完成后完整的包如下&#xff1a; 如果网速下载不到请使用网盘下载 通过网盘分享的文件…...

【模块一】kubernetes容器编排进阶实战之kubernetes 资源限制

kubernetes 资源限制 kubernetes中资源限制概括 1.如果运行的容器没有定义资源(memory、CPU)等限制&#xff0c;但是在namespace定义了LimitRange限制&#xff0c;那么该容器会继承LimitRange中的 默认限制。 2.如果namespace没有定义LimitRange限制&#xff0c;那么该容器可…...

【开源】一款基于SpringBoot的智慧小区物业管理系统

一、下载项目文件 项目文件源码链接&#xff1a;https://pan.quark.cn/s/3998d958e182如出现网盘空间不够存的情况&#xff01;&#xff01;&#xff01;解决办法是先用夸克手机app注册&#xff0c;然后保存上方链接&#xff0c;就可以得到1TB空间了&#xff01;&#xff01;&…...

Goland:专为Go语言设计的高效IDE

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;Goland是JetBrains公司开发的集成开发环境&#xff08;IDE&#xff09;&#xff0c;专为Go语言设计&#xff0c;提供了高效的代码编辑、强大的调试工具和丰富的项目管理功能。其智能代码补全、强大的调试与测试支…...

云手机与Temu矩阵:跨境电商运营新引擎

云手机与 Temu 矩阵结合的基础 云手机技术原理 云手机基于先进的 ARM 虚拟化技术&#xff0c;在服务器端运行 APP。通过在服务器上利用容器虚拟化软件技术&#xff0c;能够虚拟出多个独立的手机操作系统实例&#xff0c;每个实例等同于一部单独的手机&#xff0c;可独立运行各…...

仓颉编程笔记1:变量函数定义,常用关键字,实际编写示例

本文就在网页版上体验一下仓颉编程&#xff0c;就先不下载它的SDK了 基本围绕着实际摸索的编程规则来写的 也没心思多看它的文档&#xff0c;写的不太明确&#xff0c;至少我是看的一知半解的 文章提供测试代码讲解、测试效果图&#xff1a; 目录 仓颉编程在线体验网址&…...

Python小括号( )、中括号[ ]和大括号{}代表什么

python语言最常见的括号有三种&#xff0c;分别是&#xff1a;小括号( )、中括号[ ]和大括号也叫做花括号{ }&#xff0c;分别用来代表不同的python基本内置数据类型。 小括号&#xff08;&#xff09;&#xff1a;struct结构体&#xff0c;但不能改值 python中的小括号( )&am…...

React里使用lodash工具库

安装 使用命令 npm install lodash 页面引入 常见的引入方式 引入整个lodash对象&#xff1a; import _ from lodash按名称引入特定的函数&#xff1a; import { orderBy } from "lodash"; tips: 这两种引入方式都会引入整个lodash库&#xff0c; 体积大&#x…...

【免费分享】mysql笔记,涵盖查询、缓存、存储过程、索引,优化。

概括 本篇笔记涵盖基础查询、视图、存储过程、函数、索引、优化、分库分表。适合在学完mysql后进行时常观看。下面展示部分内容。如果需要可以在文章底部的链接进行下载查看。 简介 数据库 数据库&#xff1a;DataBase&#xff0c;简称 DB&#xff0c;存储和管理数据的仓库…...

C语言-数据结构-图

目录 一,图的概念 1,图的定义 2,图的基本术语 二,图的存储结构 1,邻接矩阵 2,邻接表 三,图的遍历 1,深度优先搜索 2,广度优先搜素 四,生成树和最小生成树 1,生成树的特点: 2,最小生成树 (1)普利姆算法Prim (2)普里姆算法思路 五,最短路径 1,Dijkstra算法 2,Fl…...

android sqlite 数据库简单封装示例(java)

sqlite 数据库简单封装示例&#xff0c;使用记事本数据库表进行示例。 首先继承SQLiteOpenHelper 使用sql语句进行创建一张表。 public class noteDBHelper extends SQLiteOpenHelper {public noteDBHelper(Context context, String name, SQLiteDatabase.CursorFactory fact…...

“宠物服务的跨平台整合”:多设备宠物服务平台的实现

2.1 SSM框架介绍 本课题程序开发使用到的框架技术&#xff0c;英文名称缩写是SSM&#xff0c;在JavaWeb开发中使用的流行框架有SSH、SSM、SpringMVC等&#xff0c;作为一个课题程序采用SSH框架也可以&#xff0c;SSM框架也可以&#xff0c;SpringMVC也可以。SSH框架是属于重量级…...

关于最新MySQL9.0.1版本zip自配(通用)版下载、安装、环境配置

一、下载 从MySQL官网进行下载MySQL最新版本&#xff0c;滑到页面最下面点击社区免费版&#xff0c;&#xff08;不是企业版&#xff09; 点击完成后选择自己想要下载的版本&#xff0c;选择下载zip压缩&#xff0c;不用debug和其他的东西。 下载完成后进入解压&#xff0c;注…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

PHP 8.5 即将发布:管道操作符、强力调试

前不久&#xff0c;PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5&#xff01;作为 PHP 语言的又一次重要迭代&#xff0c;PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是&#xff0c;借助强大的本地开发环境 ServBay&am…...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...

Python 高效图像帧提取与视频编码:实战指南

Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...