Dialogue System是一个旨在帮助 Unity 开发者快速添加自然、有机的对话到游戏中的插件。该插件提供了大量可定制化的对话选项,包括文本对话、语音对话、角色头像、背景音乐等。开发者可以使用 Dialogue System 创建出功能完善的对话系统,使游戏更加生动、丰富。
一、插件安装与初始化
Dialogue System需要 Unity 5.1或更高版本,并且可以在 Windows、Mac、Linux 平台上使用。我们可以通过 Unity Asset Store 直接下载 Dialogue System,并将其导入到Unity中。
初始化 Dialogue System 对话管理器非常简单。首先将 Dialogue System 的 prefab 拖拽到场景中,然后添加 Dialogue Manager 组件。现在,在对话管理器的 Inspector 中,您可以添加一个对话数据库。
// C# 代码示例
using UnityEngine;
using PixelCrushers.DialogueSystem;
public class Example : MonoBehaviour
{
void Start()
{
DialogueManager.ShowAlert("Hello, World!");
}
}
二、对话的构成
Dialogue System 将对话分为许多不同的部分。在 Dialogue Editor 中,您可以创建和编辑每个部分。
Conversation(会话)是对话的最高层次。它包含所有说话者、对话行为、对话选项和初始限制。会话可以存储在作为预制件的对话数据库中,因此对话可以在多个场景中共享。
Actor(演员)是会话中说话的人物。您可以添加多个角色,并为每个角色定义角色信息,包括名称、头像、声音和其他属性。
Participants(参与者)是在会话中参与的演员的子集。您可以定义对话内哪些演员可以说话,并以何时开始对话。
Conversation Lines(回话行)是对话的个体说话。每一行都有说话人、说话内容和说话音效。
Dialogue Entries(对话条目)是对话行为的类型。例如,当会话结束时,您可以告诉 Dialogue System 关闭对话或返回到之前的会话。
三、添加对话组件
Dialogue System 支持多种添加对话组件的方式。对于 UI,您可以使用 Unity 的 UI 元素,例如 Text、Image、Button 等。您可以在对话中使用 Unity 中的任何对象,例如 NPC、道具等。
<!-- XML 代码示例 -->
<DialogueUI>
<-- 显示说话人的头像 -->
<PortraitImage>
<ImageField field="Portrait" actor="Player" useDefaultField=true />
</PortraitImage>
<-- 显示对话文本 -->
<Subtitle>
<Text>
<FormattedText>
<TextField field="DialogueText" />
</FormattedText>
</Text>
</Subtitle>
<-- 显示对话选项 -->
<ResponseMenu>
<ResponseButton>
<FormattedText>
<TextField field="Text" />
</FormattedText>
<HideIf unselectable />
</ResponseButton>
</ResponseMenu>
</DialogueUI>
四、使用切换场景进行对话
您可以让 Dialogue System 通过切换场景进行对话。这对于以前不存在的升级或事件是很有用的。Dialogue System使用角色的快照对话系统,在保存角色快照并加载时也可以使用它。
// C# 代码示例
using System.Collections;
using UnityEngine;
using PixelCrushers.DialogueSystem;
public class Example : MonoBehaviour
{
public string conversation;
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
StartCoroutine(StartConversationAfterDelay());
}
}
IEnumerator StartConversationAfterDelay()
{
yield return new WaitForSeconds(0.5f);
FindObjectOfType<SnapshotSwitcher>().SaveSnapshot();
DialogueManager.StartConversation(conversation);
yield return new WaitForSeconds(0.5f);
FindObjectOfType<SnapshotSwitcher>().TakeSnapshot();
UnityEngine.SceneManagement.SceneManager.LoadScene("NextScene");
}
}
五、使用Lua脚本制作对话逻辑
Dialogue System 支持使用 Lua 脚本编写对话逻辑。这使得对话流程可以更加灵活和复杂。
// Lua 代码示例
function OnConversation(eventType, speaker, conversant)
if eventType == DialogueSystemEvents.START_CONVERSATION then
if DialogueSystem:Alert("Yes/No demo.") then
-- Start a new conversation:
DialogueSystem:StartConversation("YesNoPrompt");
end
end
return true;
end
function OnConversationLine(eventType, actor)
if eventType == DialogueSystemEvents.LINE_END then
if actor == "PC" then
-- Branch based on the player's response:
if DialogueSystem.dialogueEntry.ResponseButtons[1].isSelected then
DialogueSystem:StartConversation("YesResponse");
else
DialogueSystem:StartConversation("NoResponse");
end
end
end
return true;
end
function OnConversationEnd(eventType)
if eventType == DialogueSystemEvents.END_CONVERSATION then
DialogueSystem:SendMessage("OnYesNoComplete");
end
return true;
end
六、结语
Dialogue System 提供了丰富的功能,支持多种对话的定制。开发者可以在 Unity 中快速搭建对话系统,让游戏更加有机、生动。该插件还支持多种语言,如中文、英文等。