一键完成对话需求?这款插件你不能错过(Unity3D)(三)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Dialogue System是一个分支式的统一会话系统。它不需要任何脚本,但它是设计为易于由程序员扩展。Unity对话系统让你:• 用分支逻辑编写交互式对话。• 在灵活的、完全可自定义的UI系统中显示会话。• 定义玩家要完成的任务/任务。• 播放镜头序列,如相机剪辑和音频。• 保存和加载游戏,并在场景更改中持久化数据。• 使用本地化来显示文本,并在不同的语言中播放剪裁场景。• 导入和导出各种格式,如:draft、Chat Mapper和CSV。

3、对话管理器


对话管理器预制体

对话管理器协调运行时活动并维护包含对话系统运行时数据的Lua环境。添加对话管理器,拖动预制Assets ► Plugins ► Pixel Crushers ► Dialogue System ► Prefabs ► Dialogue Manager

网络异常,图片无法展示
|

对话管理器的默认设置使其在场景更改时保持不变,并确保场景中只存在一个副本。 您通常会使用一个对话管理器,添加到您的主菜单场景。 你可以在你的外景场景中放置其他对话管理器,这样你就可以在不需要从主场景中进入的情况下测试它们。 但是请记住,在正常的游戏中,主场景中的对话管理器将会执行并摧毁你的位置场景中的“test”对话管理器。


Dialogue System Controller 对话系统控制器

网络异常,图片无法展示
|

对话系统控制器组件保存对话系统的设置。Initial Database 最初的数据库对话管理器在对话数据库启动时加载该对话数据库。Display Settings 显示设置

网络异常,图片无法展示
|

显示设置部分包含以下子部分:

  • 本地化设置:控制如何处理语言本地化。
  • 字幕设置:控制对话UI显示字幕的方式。
  • 相机和过场设置:控制过场音序器的工作方式。
  • 输入设置:控制玩家响应菜单在对话中的工作方式。
  • 警告设置:控制对话UI在屏幕上显示警告消息的方式。


Persistent Data Settings 持久数据设置

网络异常,图片无法展示
|

持久数据设置部分允许您指定哪些数据包含在已保存的游戏中,以及在场景更改时保存哪些数据。

Other Settings 其他设置

网络异常,图片无法展示
|

其他设置部分包含其他设置。值得注意的是:

  • 实例化数据库:加载对话数据库的副本,而不是直接在Unity编辑器的playmode中使用该资产。
  • Dialogue Time Mode 对话的时间模式:默认情况下,对话系统运行Realtime 实时模式,如果你想使用时间刻度,设置对话时间模式GamePlay
  • 调试级别:在Unity编辑器的控制台中设置对话系统的日志级别,在构建中设置播放器日志文件。这对于通过对话系统活动进行跟踪非常方便。


Instantiate Prefabs组件实例化预制块:将基本的UI预制块实例化到对话管理器的画布中。 这些包括选择器元素(参见触发器和交互),以及任务跟踪HUD和任务日志窗口(参见任务)。 你可以分配不同的预制组件来定制游戏的外观。


Input Device Manager组件输入设备管理器:检测鼠标、操纵杆和键盘控件之间的切换,并帮助UI知道何时自动对焦UI按钮(在操纵杆和键盘模式下),何时不对焦按钮(在鼠标模式下)。


4、触发与交互

本节讲一下如何交互


Dialogue System Trigger对话系统Trigger

网络异常,图片无法展示
|

对话系统触发组件有三个主要部分:

  • 触发Trigger:导致对话系统触发的事件。
  • 条件Conditions:对话系统触发执行其动作时必须为真的状态。
  • 动作Actions:触发器应该做的事情,比如开始对话或设置任务状态。

Trigger可以设置触发器下拉到这些值:

Trigger触发 描述
On Use 在使用 玩家的选择器或接近选择器向GameObject发送一个OnUse消息,或在UnityEvent或脚本中手动调用对话系统触发器的OnUse()方法。
On Start 在开始 组件启动(例如,在场景启动时)。
On Enable 在启用 组件已启用。
On Disable 在禁用 组件被禁用。
On Destroy 在摧毁 组件被破坏了。
On Trigger Enter 在触发输入 组件已启用。
On Enable 在启用 该组件收到了一条OnTriggerEnter消息。要使用这个触发器,组件的GameObject应该有一个触发器碰撞器。你可能需要设置Conditions → Accepted Tags将此触发器限制为带有特定标记(如)的GameObjects Player 。
On Trigger Exit 在触发退出 组件收到一个OnTriggerExit消息。
On Collision Enter 在碰撞输入 组件收到了一条OnCollisionEnter消息。
On Collision Exit 在碰撞退出 组件收到一个OnCollisionExit消息。
On Bark Start 在bark上开始 GameObject开始玩bark游戏(一次性的对白)。
On Bark End 在bark结束 GameObject(游戏物体)完成了对bark的游戏。
On Conversation Start 在对话开始 GameObject只是作为对话的主要参与者。
On Conversation End 在谈话结束 GameObject刚刚结束了对话。
On Sequence Start 在序列开始 GameObject只是作为过场动画序列的主要参与者而开始的。除非您勾选了对话管理器中的对话序列,否则不会调用此事件Subtitle Settings → Inform Sequence Start And End
On Sequence End 在序列结束 刚刚结束了一个序列。

Conditions 条件

条件类型 描述
Lua Conditions Lua的条件 Lua表达式,例如检查变量的值。
Quest Conditions 任务条件 需要探索。
Accepted Tags 接受标签 对于OnCollision和OnTrigger事件,另一个GameObject必须有这些标签中的一个。如果接受的标签是空的,所有的游戏对象都是允许的。
Accepted GameObjects 接受对象 对于OnCollision和OnTrigger事件,另一个GameObject必须在这个列表中。如果接受的gameobject是空的,那么所有的gameobject都是允许的。

Action行动

Action行动 描述
Set Quest State 设置任务状态 设置任务和/或任务进入状态
Run Lua Code 运行Lua代码 运行Lua表达式。
Play Sequence 播放顺序 播放过场动画
Show Alert 显示警报 通过对话UI显示警告消息。
Send Messages 发送消息 使用Unity的SendMessage()方法将消息发送到目标。
Start Conversation 开始谈话 开始一个对话。
Set GameObjects Active/Inactive 设置GameObjects活动/活动 在整个游戏对象上工作。
Set Components Enabled/Disabled 设置启用/禁用组件 工作在游戏对象的特定组件。
Set Animator States 设置动画状态 在GameObjects上设置animator状态。当对话开始时对空闲字符有用。
OnExecute() UnityEvent 允许您使用UnityEvent指定其他操作。

Selectors & Usables 选择器和可用

对话系统提供了一个可选的交互系统,可以与带有可用组件的游戏对象(如npc)进行交互。你可以添加两个组件到播放器:

Selector 选择器

网络异常,图片无法展示
|

选择器组件通过从指定位置(如鼠标位置或屏幕中心)进行光线投射来检测可用项。当玩家按下use按钮时,它会向用户发送一个OnUse消息。


Proximity Selector 距离选择器

网络异常,图片无法展示
|

接近选择器组件在输入触发器碰撞器时检测可用项。当玩家按下use按钮时,它会向用户发送一个OnUse消息。


OnUse Message 消息

当玩家瞄准一个可用的并按下使用键或使用按钮时,选择器将发送一个OnUse(转换播放器)消息到可用的游戏对象。 对话系统的触发器(如对话系统触发器)响应此消息。 您自己的脚本也可以通过添加OnUse方法来响应这条消息,例如:

void OnUse(Transform player) 
{    
  Debug.Log("I'm being used by " + player);
}
复制代码


5、对话UI

Dialogue UI

本章解释了如何建立对话用户界面和用户界面。 对话系统使用对话ui来显示交互式对话和屏幕上的警报消息。 您可以通过添加一个对话参与者组件来定制每个参与者在ui中的显示方式。

网络异常,图片无法展示
|


Standard Dialogue UI 标准对话界面

标准对话UI是一组组件,用于管理上面屏幕快照中显示的UI元素。这些元素是:

  • 警告面板:显示警告消息。
  • 字幕面板:显示演员的对话文本。
  • 响应菜单:显示玩家可以选择的响应。
  • 计时器:如果对话管理器配置为定时响应菜单,则显示倒计时。
  • 文本输入:从播放器中读取文本输入。

所有的UI元素都可以重新定位和调整。


Standard Dialogue UI Prefabs 标准对话UI预制件最简单的方法是为对话管理器的对话UI字段分配一个预制块。位于Prefabs ► Standard UI Prefabs模板为:

  • Basic:上面显示的默认UI。
  • Bubble:显示字幕面板和响应菜单的卡通气泡上方的角色
  • Focus:每行的说话者淡出,而另一个行动者淡出到50%的透明度。
  • Letterbox:电影风格的字幕,在屏幕的顶部和底部有黑色的条。
  • VN:传统的视觉小说布局与较大的肖像图像上方的字幕/菜单框。
  • WRPG:带有滚动对话日志的传统西方RPG布局。


Subtitle Panels & Menu Panels 字幕面板和菜单面板

网络异常,图片无法展示
|

一个标准的对话UI通常有一个或多个字幕面板和菜单面板。 将字幕面板分配给字幕面板列表。 设置NPC默认字幕面板和PC默认字幕面板,指定NPC和玩家默认使用哪些面板。 拥有对话Actor组件的Actor可以指定使用与默认面板不同的面板。 如果在开始对话时允许打开字幕面板为真,对话系统将检查所有对话参与者以识别他们的字幕面板。 如果任何这些副标题面板指定它们应该在对话开始时立即打开,它就会打开它们。 如果你知道对话开始时没有任何面板被配置为打开,则可以取消此复选框以绕过该复选框。 将菜单面板分配给菜单面板列表。将默认菜单面板设置为默认菜单面板。 通常,您将只有一个菜单面板。 在大多数情况下,你将分配与对话UI位于同一画布中的字幕面板和菜单面板。 然而,分配位于不同画布上的面板是可以的。


Subtitle Panel 字幕面板

网络异常,图片无法展示
|


Menu Panel 菜单面板

网络异常,图片无法展示
|


Panel Animation 动画面板


字幕面板和菜单面板可以在状态改变时播放动画。 要分配动画,请向面板添加Animator组件。 指定一个动画控制器,该控制器具有以下一种或多种状态的触发器。 下面的列表描述了设置每个触发器的时间:

  • Show: 当面板打开时。
  • Hide: 当面板关闭时。
  • Focus: 当面板正在积极显示对话文本/菜单的当前行时。
  • Unfocus: 当面板仍然可见,但不包括当前活动的面板时。


6、逻辑&Lua

对话系统中不需要脚本。 但是,对话系统提供了一种名为Lua的通用脚本语言,它提供了一种非常强大的方法来控制对话流、检查和更改任务状态等等。 在大多数情况下,您可以使用简单的单击菜单。 对话系统使用了Chat Mapper建立的数据模型,Chat Mapper是行业内常用的另一种专业对话创作工具。关于所有参与者、项、位置、变量和对话的信息都存储在Lua表中。 您可以通过指定Lua条件和脚本来控制对话,通常是通过使用指向和单击菜单。 对于那些感兴趣的人,聊天映射器手册有更多关于Lua和对话系统使用的表的背景信息,在标题为用Lua编写脚本的部分。


对话系统中Lua用在哪里

在运行时,对话系统将您的对话数据库视为只读的。它将数据库值加载到Lua中,在Lua中可以检查和更改当前值。 您可以在对话系统的以下区域使用Lua:

  • 对话条目中的条件和脚本字段。
  • 在[lua(代码)]标签内的对话条目和任务字段的文本(见标记标签)。
  • 对话系统触发
  • 在您自己的脚本中,使用Lua和/或DialogueLua类(参见如何在您的c#脚本中使用Lua)
  • 对话编辑器的手表选项卡和游戏中的Lua控制台组件。


Point-and-Click Lua

在大多数您可以手动输入Lua代码的地方(如果您愿意),您还可以单击a '…按钮将字段切换为点击模式。在这种模式下,你可以使用下拉菜单,而不需要输入任何代码:

网络异常,图片无法展示
|

点击“+”添加新的条件或动作。点击恢复取消或应用应用您的选择,这将关闭下拉菜单,并为您编写Lua代码:

网络异常,图片无法展示
|


如何编写Lua代码

如果你喜欢直接写Lua代码,你会发现它类似于c#或UnityScript。有关Lua的更多信息,请参见www.lua.org。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
4月前
|
传感器 开发工具 vr&ar
ManoMotion⭐二、Unity手势识别插件简介,及效果录屏
ManoMotion⭐二、Unity手势识别插件简介,及效果录屏
|
3月前
|
图形学 C++ C#
Unity插件开发全攻略:从零起步教你用C++扩展游戏功能,解锁Unity新玩法的详细步骤与实战技巧大公开
【8月更文挑战第31天】Unity 是一款功能强大的游戏开发引擎,支持多平台发布并拥有丰富的插件生态系统。本文介绍 Unity 插件开发基础,帮助读者从零开始编写自定义插件以扩展其功能。插件通常用 C++ 编写,通过 Mono C# 运行时调用,需在不同平台上编译。文中详细讲解了开发环境搭建、简单插件编写及在 Unity 中调用的方法,包括创建 C# 封装脚本和处理跨平台问题,助力开发者提升游戏开发效率。
336 0
|
6月前
|
图形学
【推荐100个unity插件之9】分享几个完全免费的2D角色动画生成器(推荐收藏)
【推荐100个unity插件之9】分享几个完全免费的2D角色动画生成器(推荐收藏)
354 0
|
6月前
|
数据可视化 大数据 API
【推荐100个unity插件之22】基于UGUI的功能强大的简单易用的Unity数据可视化图表插件——XCharts3.0插件的使用
【推荐100个unity插件之22】基于UGUI的功能强大的简单易用的Unity数据可视化图表插件——XCharts3.0插件的使用
253 0
|
6月前
|
自然语言处理 搜索推荐 API
【推荐100个unity插件之21】unity实现多语言切换功能——Localization插件的使用
【推荐100个unity插件之21】unity实现多语言切换功能——Localization插件的使用
245 0
|
6月前
|
JSON 开发框架 API
【推荐100个unity插件之20】一个强大的JSON处理库——Newtonsoft.Json(也称为Json.NET)
【推荐100个unity插件之20】一个强大的JSON处理库——Newtonsoft.Json(也称为Json.NET)
567 0
|
6月前
|
图形学
【推荐100个unity插件之19】武器拖尾特效插件——Pocket RPG Weapon Trails(2d 3d通用)
【推荐100个unity插件之19】武器拖尾特效插件——Pocket RPG Weapon Trails(2d 3d通用)
133 0
|
6月前
|
数据可视化 C# 图形学
【推荐100个unity插件之18】Unity 新版输入系统Input System的基础使用
【推荐100个unity插件之18】Unity 新版输入系统Input System的基础使用
204 0
|
6月前
|
图形学
【推荐100个unity插件之17】具有可破坏/砍倒unity地形树木能力的破坏系统,实现unity砍树效果 —— DestroyIt - Destruction System
【推荐100个unity插件之17】具有可破坏/砍倒unity地形树木能力的破坏系统,实现unity砍树效果 —— DestroyIt - Destruction System
189 0
|
6月前
|
vr&ar 图形学
【推荐100个unity插件之16】3D物品描边效果——Quick Outline免费插件
【推荐100个unity插件之16】3D物品描边效果——Quick Outline免费插件
250 0