28.UE5实现对话系统

目录

1.对话结构的设计(重点)

2.NPC对话接口的实现

2.1创建类型为pawn的蓝图

2.2创建对话接口

3.对话组件的创建

4.对话的UI设计

4.1UI_对话内容

4.2UI_对话选项

 4.3UI_对话选项框

5.对话组件的逻辑实现


通过组件蓝图,也就是下图中的那个东西,实现对话系统

对话系统的实现思想:在角色面前判断一个球形中所有实现了对话接口的Pawn,如果该Pawn实现了对话接口,则显示该Pawn的姓名(走到一个角色面前会显示他叫什么),然后点击他的姓名会开始后续的对话。

首先创建一个第三人称游戏项目

1.对话结构的设计(重点)

难点(对话结构的理解)

定义我们的对话的结构(使用结构体定义)

一个是文本类型的回答选项,一个是命名类型的回复

 并且为其创建对话表。

定义:对话行,一个对话行包括,回答选项(数组)和回复(数组),但是一个回答选项,对应一个回复(索引对应)。一个回复即是NPC需要回复的内容,又是下一轮对话的索引。

 整体的对话的逻辑如下:

1.走到角色面前,显示NPC姓名

当角色走到甘雨面前时,会弹出第一行的回答选项(甘雨),

2.点击姓名开始对话

点击甘雨后,NPC回复(怎么了?旅行者。)

3.显示能选择的对话选项,并产生后续对话

并同时将(怎么了?旅行者。)作为命名搜索这个表,找到行命名为(怎么了?旅行者。)的哪一行同时创建回答选项(风魔龙怎么打?深渊怎么走?可以和我出去逛逛吗?)三个选项,三个选项对应三个回复,三个回复作为命名,再去寻找后续的对话行

2.NPC对话接口的实现

2.1创建类型为pawn的蓝图

2.2创建对话接口

创建对话功能的,接口蓝图

返回NPC总类,并将自身返回出去

然后生成NPC总类的子蓝图,

并为子蓝图,绑定对话数据表格,和NPC的姓名

3.对话组件的创建

创建对话组件

4.对话的UI设计

对话中的UI主要包含三种,NPC显示回复内容的(UI_对话内容),生成对话选项的(UI_D对话选项框),还有每一个选项对应的按钮(UI_对话选项)

4.1UI_对话内容

选中对话文本,提升为变量

该UI控件只有一个方法,就是更新对话内容,并显示

4.2UI_对话选项

添加三个公开,变量,

对话组件:构造这个对话选项的时候,拿到对话控件,告诉对话控件,本次回复的对话索引是多少。

对话选项:显示这个按钮中的对话文本

该对话索引的索引:这条对话选项,对应的索引(一个对话选项对应一个回复)

在构造时,显示该选项的对话文本

点击按钮时,告诉对话组件,该条回复的索引是什么

打开对话组件,实现一下,设置当前回复索引

 4.3UI_对话选项框

选中覆层的(大小到内容),当有对话选项的时候,就可以自适应选择框的大小了

样式如下:

将对话选项框提升为变量

在图表中添加一个变量

 

该UI控件也只有一个自定义事件,事件的输入是文本类型的数组,就是(对话选项),拿到对话选项的数组后,更新我们的对话框中的选项

5.对话组件的逻辑实现(重点)

打开对话组件

在开始事件时,创建一个定时器事件,每一秒获取一下前面的可交互的对象,以及初始化一下对话的内容框,和选项框UI

初始化内容框和选项框中的图表

接下来实现,每一秒获取前面的对象信息

获取对话对象中的图表

获取组件的拥有者,对其前面75像素为球心,75像素为半径的范围,进行多球体判断,将所有的pawn找出来。

将查找失败的支线,输出,方便后面使用

将所有命中结果遍历,并将实现了对话功能的对象取出,执行接口中的函数,获取对话对象,将获取的对象提升为变量

获取对象陈工后,后续的对话情景和显示对话对象都是针对这个对象的,所以使用do once只执行一次

获取对话情景

如果没有检测到对象,则不显示UI

显示对话对象,(这个时候当前这句话,对应甘雨对话表的第一句,回复选项只对象名称(甘雨)),这个时候靠近我们的可对话对象,就会显示对象的名称

如4.2所讲,点击回答按钮后,执行会将按钮的索引传递过来,按钮的索引对应这当前回复的索引

然后调用更新对话内容,对整个对话内容进行更新

根据索引,更新NPC的对话内容

整体逻辑大致的差不多如下图所示

难点在于,回答的选择,对应了一条NPC的回复,NPC会根据这条回复,再去查找下一次的对话内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/479853.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Reachy 2,专为AI与机器人实验室打造的卓越开源双臂移动操作平台!

近期,花粉机器人(POLLEN ROBOTICS)隆重推出Reachy 2仿生机器人——下一代开源操作平台,为AI与机器人实验室带来理想的双臂移动操作科研平台! Reachy 2的仿生性: 》拥有两个基于Maxon无刷电机的仿生7自由度…

python的openpyxl库设置表格样式:字体/边框/对齐/颜色等

学习目录 1. 安装和使用openpyxl库设置表格样式 2 设置字体font 3 设置边框 4 设置对齐方式 5 设置单元格数据格式 6 设置行高和列宽 7 填充单元格颜色 附录-关于颜色说明 本章节主要介绍如何使用openpyxl库设置表格中的一些样式,比如字体,边框…

Git旧文件覆盖引发思考

一天,我的同事过来找到我,和我讲:张叫兽,大事不好,我的文件被人覆盖了。git是真的不好用啊 git不好用?文件被覆盖;瞬间我似乎知道了什么,让我想到了某位男明星的语法:他…

QSqlTableModel的使用

实例功能 这边使用一个实例显示数据库 demodb 中 employee 数据表的内容,实现编辑、插入、删除的操作,实现数据的排序和记录过滤,还实现 BLOB 类型字段 Photo 中存储照片的显示、导入等操作,运行界面如下图: 在上图中…

什么是代理,nodenginx前端代理详解

一. 什么是代理? 代理就是通过一个特殊的网络服务去访问另一网络服务的一种间接访问方式。像我们不能直接访问国外的网站,只能使用VPN,就是使用了代理 二. 前端为什么要用代理? 首先明确以下两个概念 (1&#xff09…

java脚手架系列16-AI大模型集成

之所以想写这一系列,是因为之前工作过程中有几次项目是从零开始搭建的,而且项目涉及的内容还不少。在这过程中,遇到了很多棘手的非业务问题,在不断实践过程中慢慢积累出一些基本的实践经验,认为这些与业务无关的基本的…

网络安全中的数据科学如何重新定义安全实践?

组织每天处理大量数据,这些数据由各个团队和部门管理。这使得全面了解潜在威胁变得非常困难,常常导致疏忽。以前,公司依靠 FUD 方法(恐惧、不确定性和怀疑)来识别潜在攻击。然而,将数据科学集成到网络安全中…

【算法day1】数组:双指针算法

题目引用 这里以 1、LeetCode704.二分查找 2、LeetCode27.移除元素 3、LeetCode977.有序数组的平方 这三道题举例来说明数组中双指针的妙用。 1、二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜…

open-instruct框架使用记录:只使用huggingface数据集的小部分进行训练,如何修改dataset_info.json文件

open-instruct框架 这篇笔记主要记录以下问题:只使用huggingface下载的数据集中的一小部分数据进行数据训练。而且我不想修改open-instruct的加载数据集的代码,以及脚本中的--dataset_mixer_list参数的指定等。下面是我的思路历程。 if args.dataset_na…

Jenkins升级到最新版本后无法启动

1. 场景还原 最近在web界面将jenkins升级到最新版本后,后台无法启动jenkins服务,服务状态如下: 运行jenkins命令提示invalid Java version jenkins --version jenkins: invalid Java version: java version "1.8.0_202" Java(TM)…

DRM(数字权限管理技术)防截屏录屏----ffmpeg安装

提示:ffmpeg安装 文章目录 [TOC](文章目录) 前言一、下载二、配置环境变量三、运行ffmpeg四、文档总结 前言 FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的…

Unity版本使用情况统计(更新至2024年11月)

UWA发布|本期UWA发布的内容是第十五期Unity版本使用统计,统计周期为2024年5月至2024年11月,数据来源于UWA网站(www.uwa4d.com)性能诊断提测的项目。希望给Unity开发者提供相关的行业趋势作为参考。 2024年5月 - 2024年…

Spring Aop 中对JoinPoint的理解

以下是源码中对 JoinPoint 的描述 A runtime joinpoint is an event that occurs on a static joinpoint (i.e. a location in a program). For instance, an invocation is the runtime joinpoint on a method (static joinpoint). The static part of a given joinpoint can…

C中指针在64位操作系统下为什么是4而不是8

好久没写C了,今天用VScode想写个Demo,翻了下指针资料,想打印下指针大小,发现是4,但是理论上64位系统不应该是8么? 结论就是我编的是32位程序,编译器按照32位编译的。 用vscode的C 插件编译运行…

使用 pycharm 新建不使用 python 虚拟环境( venv、conda )的工程

有时候我们发现一个好玩的 demo,想赶快在电脑上 pip install 一下跑起来,发现因为 python 的 venv、conda 环境还挺费劲的,因为随着时间的发展,之前记得很清楚的 venv、conda 的用法,不经常使用,半天跑不起…

鸿蒙主流路由详解

鸿蒙主流路由详解 Navigation Navigation更适合于一次开发,多端部署,也是官方主流推荐的一种路由控制方式,但是,使用起来入侵耦合度高,所以,一般会使用HMRouter,这也是官方主流推荐的路由 Navigation官网地址 个人源码地址 路由跳转 第一步-定义路由栈 Provide(PageInfo) pag…

Flink Sink的使用

经过一系列Transformation转换操作后,最后一定要调用Sink操作,才会形成一个完整的DataFlow拓扑。只有调用了Sink操作,才会产生最终的计算结果,这些数据可以写入到的文件、输出到指定的网络端口、消息中间件、外部的文件系统或者是…

鸿蒙本地模拟器 模拟TCP服务端的过程

鸿蒙模拟器模拟TCP服务端的过程涉及几个关键步骤,主要包括创建TCPSocketServer实例、绑定IP地址和端口、监听连接请求、接收和发送数据以及处理连接事件。以下是详细的模拟过程: **1.创建TCPSocketServer实例:**首先,需要导入鸿蒙…

【VUE3】新版Vue3+ElementPlus全家桶开发视频项目实战

VUE 介绍 Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。 Vue.js是一个MVVM(Model - View - ViewModel)的SPA框架。 Model:数…

Edify 3D: Scalable High-Quality 3D Asset Generation

Deep Imagination Research | NVIDIA 目录 一、Abstract 二、核心内容 1、多视图扩散模型 3、重建模型: 4、数据处理模块: 三、结果 1、文本到 3D 生成结果 2、图像到 3D 生成结果 3、四边形网格拓扑结构 一、Abstract NVIDIA 开发的用于高质量…