如何实现一个简单的对话系统

article/2025/10/19 16:22:25

文章目录

  • 前言
  • 一、为什么需要对话
  • 二、创建对话框
    • 1.创建Canvas
    • 2.创建Panel
    • 3.创建Text和Image
    • 4.Text介绍
    • 5.Image介绍
  • 三、对话的实现(脚本)
  • 四、实际效果
  • 总结


前言

本文主要是对如何完成简单的游戏类对话做一个学习总结,新手菜勿喷


一、为什么需要对话

游戏需要剧情,对话能推动剧情发展,这在RPG或其他有故事情节的游戏十分重要,而对话框是实现对话的最基本方法。

二、创建对话框

1.创建Canvas

在U3D中,我们可以在场景内创建canvas来进行对UI界面的编写
在这里插入图片描述

2.创建Panel

有了Panel这一对象,我们可以开始进行对话框的编写了。

在这里插入图片描述

3.创建Text和Image

Text就是文本,也就是我们的对话的主要内容
Image是对话框的背景,我们可以自己设计一个满足需求的对话框。

4.Text介绍

首先我们要明确,Text只是文本框,我们常见的游戏中的对话框是带有底图(Image)的。
在这里插入图片描述
在这个界面可以控制文本框的大小和位置,我们一般将对话框放在屏幕的中间偏下部分。
在这里插入图片描述我们也可以对文本的具体内容进行修改。
在这里插入图片描述Text栏就是我们的文本内容,当然,一般为了满足对话这一要求,我们都是通过脚本来控制的。
在Character栏,我们可以控制文本的字体属性,诸如字体风格,大小尺寸等。
Paragraph栏主要是对文本整体的调节,类似于word文档的布局修改等。

5.Image介绍

和文本Text框一样,Image框也可以修改大小位置等属性,我们一般保持位置与文本框相同,而大小稍大一点。
在这里插入图片描述在Source Image框中可以修改背景图样式,也可以用默认的,在Color和Material中也可以像普通物体一样修改这些属性。

三、对话的实现(脚本)

前文提到过,大多数对话都是通过脚本支持的。
我们现在来编写这样一个脚本。
我们称这个脚本为Dialogue System。
在这里插入图片描述
首先我们要添加这一个部分using UnityEngine.UI;

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

抬头如上
在类下面加入

 [Header("UI组件")]public Text textLabel;public Image faceImage;[Header("文本文件")]public TextAsset textFile;public int index;List<string> textList = new List<string>();

List一段是我们定义一个文本以便来记录我们的对话内容。
在这里插入图片描述
剧情可以记载在这样的文本文档txt文件中。

  if (Input.GetKeyDown(KeyCode.F) && index == textList.Count) {gameObject.SetActive(false);index = 0;return;}if (Input.GetKeyDown(KeyCode.F)){textLabel.text = textList[index];index++;}

我们知道对话时一般需要一个按键来进行,我们这里是设置成F,通过index来控制文本中行数的变化(一行就是一段话)。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class DialogueSystem : MonoBehaviour
{[Header("UI组件")]public Text textLabel;public Image faceImage;[Header("文本文件")]public TextAsset textFile;public int index;List<string> textList = new List<string>();void Awake(){GetTextFromFile(textFile);index = 0;}private void OnEnable(){textLabel.text = textList[index];index++;}// Update is called once per framevoid Update(){if (Input.GetKeyDown(KeyCode.F) && index == textList.Count) {gameObject.SetActive(false);index = 0;return;}if (Input.GetKeyDown(KeyCode.F)){textLabel.text = textList[index];index++;}}void GetTextFromFile(TextAsset file){textList.Clear();index = 0;var lineData = file.text.Split('\n');foreach (var line in lineData){textList.Add(line);}}
}

这就是完整代码。

四、实际效果

能力有限无能 做不了GIF图,在这里插入图片描述
上面的代码我们绑定在Panel上,Text Label和Face Image用Text ,Image去绑定,Text File就是我们的对话内容,index表示当前的行数,这个是可以随游戏而变化的。
最后我们就可以得到一个完整的对话的效果了。


总结

这只是一个简单的对话的创建,事实上我们玩过的游戏中的对话还可以实现分支,自动触发等效果,我们还能用美术效果来美化我们的对话系统,当然这可以以上文的系统做基础。
欢迎大家来交流。


http://chatgpt.dhexx.cn/article/B3OBZL0t.shtml

相关文章

面向任务的对话系统

面向任务的对话系统 1.1 流水线方法1.1.1 语言理解1.1.2 对话状态跟踪1.1.3 策略学习1.1.4 自然语言生成 1.2 端到端方法 面向任务的对话系统一直是口语对话系统的重要分支。在本节中&#xff0c;我们将回顾面向任务的对话系统的流水线方法和端到端方法。 1.1 流水线方法 基于…

对话系统简单笔记

开放域对话系统&#xff1a;没有限定主题或明确目标&#xff0c;用户与系统之间自由对话。 特定域对话系统&#xff0c;面向具体任务。 如&#xff1a;任务型对话&#xff08;siri&#xff09;&#xff0c;属于特定域&#xff0c;完成任务或动作&#xff0c;话轮数越少越好。…

自然语言处理与企业对话系统设计

原创:晏茜 资料来源:李俊 本文分享的主题分为两个部分,第一部分内容是关于企业级对话系统的简介,第二部分探讨对话系统和自然语言处理技术结合的领域。 1. 企业对话系统 我们首先来介绍一下企业级对话系统。谷歌的 CEO 桑达尔在 16 年曾发表言论,人工智能将通过各式各样…

定义对话系统

定义对话系统 一、定义对话系统的方法 以下方法论其实就是在定义对话系统&#xff0c;后面的 确定场景边界 梳理业务要素和知识库 撰写故事线 抽取对话流程 都是下面方法论的具体展开。 二、确定场景边界 1.创建机器人定位&#xff08;机器人的性格定位&#xff09; 2.明…

【对话系统】对话系统核心技术概要

概述 人机交互备受学术界的关注&#xff0c;人机对话是人机交互的核心。 对话系统是模拟人与人交流的计算机系统。 对话系统有很多分类方法。按照应用场景的不同&#xff0c;可分为开放域&#xff08;闲聊式&#xff09;和封闭域&#xff08;检索式、知识问答式、任务式&…

UNITY 对话系统

1. 准备工作 创建一个画布&#xff08;Canvas&#xff09;&#xff0c;画布中创建一个面板&#xff08;Panel&#xff09;&#xff0c;面板中放个文本框&#xff08;TEXT&#xff09;和两个按钮&#xff08;Button&#xff09;&#xff08;一个用于直接关闭&#xff0c;另一个…

最新对话系统综述

前言 首先介绍一篇对话系统领域综述最新的paper&#xff0c;写的非常好 2021年南洋理工大学发表的论文&#xff1a; https://arxiv.org/pdf/2105.04387.pdf 第一章&#xff1a;简要介绍对话系统和深度学习。 第二章&#xff1a;讨论现代对话系统中流行的神经模型及其相关工…

前沿重器[25] | 聊聊对话系统:多轮对话

前沿重器 栏目主要给大家分享各种大厂、顶会的论文和分享&#xff0c;从中抽取关键精华的部分和大家分享&#xff0c;和大家一起把握前沿技术。具体介绍&#xff1a;仓颉专项&#xff1a;飞机大炮我都会&#xff0c;利器心法我还有。 近期&#xff0c;我再次总结了我的历史文章…

智能对话系统之多轮对话

序言 以一周前的一条微博作为开始。一周前我讲&#xff1a;相对的&#xff0c;自然语言解析技术已经逐渐不再成为各家广义智能助理产品的核心竞争力&#xff0c;识别用户意图之后所提供的服务开始成为对话机器人差异化的核心。 百度&#xff1a;对话系统的组成 对于一个对话系…

对话系统 | (1) 任务导向型对话系统 -- 对话管理模型研究最新进展

原文链接 作者丨戴音培、虞晖华、蒋溢轩、唐呈光、李永彬、孙健 单位丨阿里巴巴-达摩院-小蜜Conversational AI团队&#xff0c;康奈尔大学 1. 对话管理模型背景 从人工智能研究的初期开始&#xff0c;人们就致力于开发高度智能化的人机对话系统。艾伦图灵&#xff08;Alan …

对话系统笔记

原文链接&#xff1a;https://www.jiqizhixin.com/articles/2020-01-31-7 对话系统一般分为两种&#xff1a;任务型对话系统和闲聊型对话系统。本文主要讨论前者。 任务型对话系统&#xff0c;也称目标导向型对话系统&#xff0c;多用于垂直领域业务助理系统&#xff0c;如微…

深入浅出对话系统——任务型对话系统技术框架

任务型对话系统架构 比如&#xff0c;这是一个任务型订票系统的对话例子。 如果要我们实现一个这样的对话系统&#xff0c;其中有三个最大的难点&#xff1a;理解用户输入、记住对话历史信息、知道要问什么。 首先是要能理解用户的输入&#xff0c;知道用户想什么&#xff1b…

一文读懂智能对话系统

来源&#xff1a;机器学习算法全栈工程师 作者&#xff1a;蒙康 编辑&#xff1a;王抒伟 本文共6050字&#xff0c;建议阅读10分钟。本文带大家理解智能对话系统的研究方法以及未来趋势。 笔者在最近的研究中发现了一篇非常好的有关对话系统的论文&#xff0c;《A Survey on Di…

对话系统 | (8) 任务型对话系统概述

本篇博客主要参考/节选中科院自动化所王唯康博士的博士论文《任务型对话系统中对话管理方法研究》。 文章目录 1. 概述2. 基于管道的任务型对话系统2.1 语言理解模块2.2 对话管理模块2.3 语言生成模块 3. 端到端的任务型对话系统3.1 基于检索的任务型对话系统3.2 基于生成的任务…

对话系统 | (4) 任务型对话系统基础

本篇博客内容主要来自第十四届中国中文信息学会暑期学校暨中国中文信息学会《前沿技术讲习班》— 张伟男、车万翔《任务型对话系统》 PPT下载链接 文章目录 1. 任务型对话系统概述2. 任务型对话系统关键技术自然语言理解对话管理对话状态追踪对话策略优化 自然语言生成端到端…

前沿重器[21] | 聊聊对话系统:概述

前沿重器 栏目主要给大家分享各种大厂、顶会的论文和分享&#xff0c;从中抽取关键精华的部分和大家分享&#xff0c;和大家一起把握前沿技术。具体介绍&#xff1a;仓颉专项&#xff1a;飞机大炮我都会&#xff0c;利器心法我还有。 近期&#xff0c;我再次总结了我的历史文章…

Xenko C#开源游戏引擎

Xenko是一款用于渲染和 VR 的开源 C&#xff03; 游戏引擎。该引擎具有高度模块化&#xff0c;旨在为游戏制作者提供更大的开发灵活性。Xenko 附带一个编辑器&#xff0c;允许您以直观和直观的方式创建和管理游戏或应用程序的内容。 官方网站&#xff1a;https://xenko.com/ g…

开源游戏引擎整合

2D: Allegro.cc - Main http://www.allegro.cc/ 老牌子了&#xff0c;和SDL同时是很经典两个EG开发组件&#xff0c;最近貌似在和PY进行联合&#xff1f; ClanLib - ClanLib Game SDK http://www.clanlib.org/ CLANLIB是以前听过最复杂最丰富的SDK&#xff0c;看看链接 http://…

开源游戏java引擎_基于Java的开源3D游戏引擎jMonkeyEngine

jMonkeyEngine简介 jMonkeyEngine是一款纯Java语言编写的游戏引擎,继承了Java应用跨平台的特性,而且是开放源代码的,遵循BSD开源协议,BSD开源协议用一句简单的话概括就是你可以用它做任何你想做的事情而不必担心版权问题。 这款游戏引擎在商业游戏中使用的不多,但是笔者觉…

<2021SC@SDUSC> 开源游戏引擎 Overload 代码模块分析 之 OvTools(七)—— 终篇总结

2021SCSDUSC 开源游戏引擎 Overload 代码模块分析 之 OvTools&#xff08;七&#xff09;—— 终篇总结 目录 前言回顾1、Eventing2、Filesystem3、Time4、Utils 总结下一个计划 前言 本篇是开源游戏引擎 Overload 模块 OvTools 的最后一篇了。本篇&#xff0c;笔者将对 OvToo…