NPC 对话框

Time:5 分钟

Dialog 对象能让你通过内置界面来创建能够与之交谈的 NPC 角色。界面简单易用,甚至无需进行脚本编写。不仅如此,你还能通过 Dialog/DialogChoiceSelected 事件来添加额外的功能。

可应用于以下场景:
*创建提供奖励或任务的 NPC 角色;
*创建机器人助手;
*创建会说话的敌人;
*可以创建任何物品,请尽情发挥你的想象!

基本概述

对话应用实际上非常简单,即使没有完成 Lua 语言学习的制作者,也不必进行脚本编写。对话的构成如下图所示:

DialogExample.PNG

Dialog 对象会显示初始提示,随后会从 DialogChoice 对象向用户提供回答选择;而 DialogChoice 接着会通过自身所包含的 DialogChoice 对象向用户提供回答选择。

创建基本的对话

制作对话气泡

首先,打开 Roblox Studio 并创建一个新场景。在管理器(View(视图)-> Explorer(管理器))中,选择你想要显示的对话气泡部件。单击“Insert(插入)”,选择“Basic Objects(基本对象)”,然后在出现的窗口中选择“Dialog(对话)”。第一个对话对象就创建完成了!在使用角色运行游戏(联机或单人测试模式)前,暂时无法看到对话气泡。
在属性窗口(View(视图)-> Properties(属性))中,可以看到 Dialog/InitialPrompt 属性。将该属性更改为当你单击对话气泡时该部件所要说的话。

好啦!你已经完成了第一个单击其图标就会说话的部件!

添加选择

你已经做好了对话气泡。效果不错,不过你还是没法跟它交谈,对吧?
选择原始的 Dialog 对象并单击“Insert(插入)”,单击“Basic Objects(基本部件)”,接着从窗口中选择 DialogChoice。在已经打开的属性窗口中将会看到一条名为 DialogChoice/UserDialog 的属性。这是用户将会得到的选择而非该属性或任何其他属性的名称。DialogChoice/ResponseDialog 属性是用户选择后部件会说的话,请将其更改为想要说的话。
向原始的 Dialog 对象添加多少个 DialogChoice 对象,就能向用户提供多少种选择。

添加更多选择

现在,我们的 Dialog 能向用户提供多种选择,每种选择都能让部件给出一种回答。此外,我们还能在这些选择中添加更多选择,从而用该部件创建一组更加丰富的对话。
要实现这一目的,只需在完成上一步时不将 DialogChoice 对象插入原始 Dialog 对象,而是将其插入已有的 DialogChoice 对象当中。

更多属性和自定义内容

可以利用其他属性进一步自定义自己的 Dialog。请通过属性窗口更改这些属性。
注意:这些都是只会在游戏中呈现视觉效果的属性。

Dialog/ConversationDistance:请将其设为能够与部件对话的最大距离。走出该范围,对话就会终止。

Dialog/Purpose:这些是显示在部件上方供你单击的各种图标。任务用 ! 表示,帮助用“?”表示,而商店则用“$”表示。

Dialog/Tone:这是对话(即对话气泡)和选择 GUI 的颜色。友好用绿色表示,中立用蓝色表示,敌对则用红色表示。

示例

以下是一个使用中的 Dialog 示例。

Final_Dialog_Example.gif

脚本编写

如果你已经完成了 Roblox Lua 的学习,还可以向自己的 NPC 部件添加更多的功能。脚本编写事件 DialogChoiceSelected 包含两种参数,即玩家对象和玩家所作选择的对象。该事件_不会_返回选择的名称。每当玩家作出一种选择时,都会触发该事件。

workspace.Dialog.DialogChoiceSelected:connect(function(player,choice)
	print(player.Name,choice.Name)
end)

该事件会打印玩家的名称,以及每次玩家作出选择时所作选择的名称。你不能用 Dialog 方法将其本地化为具体的选择。如果希望在玩家作出特定选择时触发事件,就需要赋予其一个唯一的 Name 属性,并将其与 if 语句进行比较。

workspace.Dialog.DialogChoiceSelected:connect(function(player,choice)
	if choice.Name == "No" then
		player.Character.Humanoid.Health = 0
	elseif choice.Name == "Yes" then
		player.Character.Humanoid.Health = 1000
	end
end)

你也可以在特定玩家作出特定选择时触发事件。

示例:

workspace.Dialog.DialogChoiceSelected:connect(function(player,choice)
	if choice.Name == "isplayer" and player.Name == "pighead10" then
		player.Character.Humanoid.Health = 10000
	end
end)

你可以通过该类事件可以给予角色任务、奖励、商店物品等!

***Roblox官方链接:NPC 对话框