NPC 对话框¶
Time:5 分钟
Dialog 对象能让你通过内置界面来创建能够与之交谈的 NPC 角色。界面简单易用,甚至无需进行脚本编写。不仅如此,你还能通过 Dialog/DialogChoiceSelected
事件来添加额外的功能。
可应用于以下场景:
*创建提供奖励或任务的 NPC 角色;
*创建机器人助手;
*创建会说话的敌人;
*可以创建任何物品,请尽情发挥你的想象!
基本概述¶
对话应用实际上非常简单,即使没有完成 Lua 语言学习的制作者,也不必进行脚本编写。对话的构成如下图所示:
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 示例。
脚本编写¶
如果你已经完成了 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 对话框