一、前言
Dialogue System是一个分支式的统一会话系统。它不需要任何脚本,但它是设计为易于由程序员扩展。
Unity对话系统让你:
- 用分支逻辑编写交互式对话。
- 在灵活的、完全可自定义的UI系统中显示会话。
- 定义玩家要完成的任务/任务。
- 播放镜头序列,如相机剪辑和音频。
- 保存和加载游戏,并在场景更改中持久化数据。
- 使用本地化来显示文本,并在不同的语言中播放剪裁场景。
- 导入和导出各种格式,如:draft、Chat Mapper和CSV。
效果图:
二、下载地址
download.csdn.net/download/q7…
三、正文
1、开始
设置
如果你的项目使用Unity5.x,则您必首先更改为强制文本序列化
- Edit → Project Settings → Editor
- 然后改变Asset Serialization到Force Text和Version Control到Visible Meta Files
下一步
⑴演示场景
演示场景演示场景在Plugins ► Pixel Crushers ► Dialogue System ► Demo 播放它,看看对话系统是如何工作的
怎么玩
- 使用箭头键或WASD键移动。
- 用鼠标看。
- 查看可交互对象并按下空格键进行交互。
- 鼠标左键射击。
- 按“ESC”以打开“暂停”菜单。
演示任务您可以在演示场景中这样做:
- 获取发射代码(任务):与一等兵哈特交谈,以获得这一任务。它涉及到在隔壁房间找到一个密码并与计算机进行交互。
- 敌人进攻(任务):在隔壁的房间里和NPC谈一谈,来完成这个任务。它演示了如何设置基于计数器的任务,在这种情况下是一次杀戮任务。
- 变更场景与门互动以改变场景。这演示了如何在场景更改中保留数据。
- 存载小游戏使用“暂停”菜单保存和加载游戏。
⑵概述
对话制度由以下主要部分组成:
- 对话数据库:包含对话、任务和变量。
- 对话编辑器:编辑对话数据库。您还可以导入和导出第三方格式。
- 对话管理器:在运行时管理对话系统活动。提供预制件。
- 对话UI:显示交互式对话、警报信息、任务日志等。
- 交互系统:在运行时触发活动,例如启动会话。
对话数据库dialogue database是一个资产文件,包含会话、任务和用户定义的变量。你通常会使用对话编辑器来编辑其内容,尽管您也可以从其他几种格式中导入内容。
对话数据库包含设计时内容,以及在Unity编辑器中编辑的字段。在运行时,对话系统将对话数据库视为只读数据库;它将对话数据库字段加载到游戏期间可以改变值的地方。
对话编辑器
对话管理器是您场景中的一个GameObject,它协调所有的对话系统活动并保存对话系统的运行时数据。
对话UI
对话系统使用以下UI:
- 对话UI:运行交互式对话和警报消息。(如上文所示)
- 任务日志窗口:显示玩家的主动任务和已完成的任务。
- 任务跟踪器HUD:显示主动任务的跟踪信息。
交互系统
对话系统提供与GameObjects交互的组件,并执行诸如开始对话和更新任务状态等操作。
本地化
对话系统支持对话数据库内容和一般UI元素的本地化。
扩展对话系统
虽然对话系统的默认功能非常强大和灵活,但您也可以创建自己的逻辑函数、裁剪场景操作、UI类型等等。这可以在脚本中编写。
⑶快速启动
本节直接跳到使用对话系统创建和运行会话。您将学习如何:
- 创建对话数据库并编写对话。
- 设置对话管理GameObject。
- 开始谈话。
- 与对象交互。
- 在对话期间禁用播放器控制。
步骤:
步骤1.创建一个新场景(File → New Scene).
步骤2.拖动预制件Assets ► Plugins ► Pixel Crushers ► Dialogue System ► Prefabs ► Dialogue Manager进入场景:
步骤3.这个GameObject已经指向了一个基本的对话UI,我们需要建立一个对话数据库,让我们单击Create:
步骤4.在为数据库指定好路径以及名字之后,再次点击对话管理器GameObject。单击Edit按钮或对话系统图标。这将打开“对话编辑器”窗口:
步骤5.单击Conversations标签。
- 单击“+”按钮添加新会话。
- 右键单击橙色START节点并选择创建子节点。点击子节点,在Inspector面板的Dialogue Text输入“Hello.”字段
- 右键单击灰色节点("Hello."),选择Create Child Node创建子节点,再次输入"Good Bye."
- 灰色节点是NPC说的,蓝色节点是玩家说的。你的谈话应如下所示
步骤6.为玩家创建一个空游戏对象(GameObject → Create Empty)和一个Cube给NPC(GameObject → 3D Object → Cube)。将空游戏对象重命名为“Player”。将Cube重命名为“NPC”,并将其位置设置为(0,0,0),使其在“Game”视图中可见。
步骤7,点击NPC。加一个对话系统触发器:
步骤8.单击Add Action并选择Start Conversation:
步骤9.从Conversation下拉,指定Conversation字段为New Conversation 1,并将Player分配给Conversation Actor,NPC分配给Conversation Conversant.
步骤10.最后,设置Trigger为On Start。这告诉对话系统触发器在场景开始时执行其操作。
第11步,现在开始你的第一次对话!对话系统将显示NPC线(“hello.”)。紧随其后的是Player Response菜单,它包含一个选项(“Goodbye.”)。它使用了基本的标准对话UI,这是一个通用模板,您以后可以定制它来查看您想要的任何内容。
接下来,我们将使用交互系统开始对话。
步骤12.设置Trigger为On Use。这告诉对话系统触发器在接收OnUse消息时执行其操作,通常来自播放器上的交互组件。
步骤13.添加Usable组件。这告诉玩家的交互组件,NPC可被点击的最大使用距离是30
步骤14.点击玩家对象并添加一个Selector组件。设置Select At为Mouse Position:
步骤15.现在再放一遍现场。将鼠标放置在立方体上,以便看到以下黄色消息:
这意味着玩家的选择器组件已经检测到NPC的可用组件。按空格键或鼠标右键。 Selector组件将向NPC发送OnUse消息,NPC的对话系统触发器将通过启动会话来响应。
Selector组件和similar 组件,Proximity Selector组件,提供触发对话系统活动的方法。 它们可定制。您可以将它们配置为选择多种不同的方法,而不仅仅是使用鼠标光标。 使用它们也不是强制性的。 如果你愿意,可以使用自己的交互系统或C#代码运行对话系统触发器。
步骤16.您可能注意到Selector组件在会话期间保持活动状态。 在许多情况下,在交谈期间,您会想要禁用选择器和可能的其他组件,如玩家的运动和相机控制。 这样做的一种方法是添加一个对话系统事件组件。 此组件具有在各种对话系统活动上运行的事件。 配置在谈话开始时禁用选择器和谈话结束要重新启用它:
总结
这个快速启动演示了如何:
- 创建对话数据库并编写对话。
- 设置对话管理GameObject。
- 开始谈话。
- 与对象交互。
- 在对话期间禁用播放器控制。