本文将为大家讲解如何使用Dialogue System在Unity中快速创建游戏的对话系统,实现角色间的相互对话并且带有简单的交互。

首先在Asset Store中下载Dialogue System插件,该插件拥有丰富的API支持以及独立的UI,对于很多游戏来说都非常适用。使用该插件可以很方便的在数据库中创建角色对话,无需编写任何代码。

将插件导入工程中,然后新建数据库。

注意:导入插件之前要确保将Editor Settings中的Asset Serialization设为Mixed模式,这样就可以使用任意类型的序列化。操作步骤如下:




下面新建数据库,右键点击Project视图,依次选择Create > Dialogue System > Dialogue Database新建数据库并命名,这里是TalkDB。


下一步是在Actors中指定对话的角色,通常是玩家与NPC。


上面添加了两个角色,Erwin是玩家角色,所以这里将IsPlayer设为True。Herbert是NPC角色,一只友好的怪兽。

添加对话
在Conversations标签下为角色添加对话,点击菜单项New Conversation新建对话并命名:




创建节点来构成整个对话系统,操作方式与Unity自带的Animation Controller编辑器类似。新建子节点后,系统会自动添加父节点到子节点的链接。每个节点都包含标题和内容两部分。对话内容将在对话开始后显示在对话框中。

简单的对话示例如下,灰色节点代表NPC,蓝色节点代表玩家:


添加对话管理器

对话管理器是管理数据库与角色间交互的游戏对象,负责协调对话。依次点击菜单项Window > Dialogue System > Wizards > Dialogue Manager添加对话管理器。将之前新建的数据库文件拖拽至对话管理器窗口的Database字段。

选择对话框UI
Dialogue System中包含多种对话框UI预设体,你可以将对话框预设体赋值给对话框管理器的Dialogue UI属性。

开始对话
以上设置完毕后就可以开始对话了。无需代码也可以直接开始对话过程,但为了更好的控制角色对话节奏,这里使用Dialogue System的API进行管理,当角色走进NPC时开始对话,脚本代码如下:

[C#] 纯文本查看 复制代码public class DialogueUtil{ private bool _conversationActive = false; #region Singleton init private static volatile DialogueUtil instance; private static object syncRoot = new System.Object(); private DialogueUtil() { } public static DialogueUtil Instance { get { if (instance == null) { lock (syncRoot) { if (instance == null) instance = new DialogueUtil(); } } return instance; } } #endregion /// <summary> /// This methods starts a conversation if the distance from a player to an npc is less then the param distance /// </summary> /// <param name=name>name of the conversation</param> /// <param name=distance>distance player to npc</param> /// <param name=player>transform of the player</param> /// <param name=npc>transform of npc</param> public void StartConversationForDistance(string name, float distance, Transform player, Transform npc) { float dist = Vector3.Distance(player.position, npc.position); // We are near the monster => monster introduces himself if (dist < distance) { if (!_conversationActive) { DialogueManager.StartConversation(name); _conversationActive = true; } } else { _conversationActive = false; } } }

接下来就可以使用如下方式开始对话了:

[C#] 纯文本查看 复制代码DialogueUtil.Instance.StartConversationForDistance(Meeting_Herbert, 3.0f, thePlayerTransform, theNPCTransform);

对话框UI使用Unity自带的UI系统,最终结果如下:









原文链接:http://jayanam.com/unity-3d-dialogue-system-tutorial/
原文作者:Jay AnAm
转载请注明来源:Unity官方中文社区 (forum.china.unity3d.com)。请勿私自更改任何版权说明信息。


教程, 对话框, Unity, 插件