经验工具

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

在体验中 Tools 是用户可以在会话中装备的互动工具,例如剑、火箭发射器和魔法杖。您可以创建自定义体验工具,将它们放入您的体验层次中,并编写脚本来为用户实现它们。

创建体验工具

要创建任何体验工具的第一步,您需要创建一个工具对象来包含所有构成工具的元素。然后,您可以将其他实例添加到工具对象中,包括零件和网格、音效和提供功能的脚本。您还可以设置 工具处理调整工具握住自定义您的工具图标 来提高用户体验。

创建工具对象

您可以通过以下步骤创建新的工具对象:

  1. 探索器 窗口中,将鼠标悬停在 工作区 上,然后单击 按钮显示对象列表。

  2. 互动 类别下选择 工具

添加零件或网格

创建工具对象后,您需要将 PartsMeshParts 添加到工具模型或 创建工具作为库存物品 而没有零件和网格。像其他模型一样,体验工具可以由多个 Parts 组成,因此您需要使用 Weld 约束连接工具的所有部分。

如果您想要创建一个工具而不添加零件或网格,您可以将其创建为库存物品

设置工具处理手柄

要启用用户携带工具,您需要设置一个 Part 并将其命名为 Handle 以附加到用户的手。以下示例显示了具有三个部分的魔法杖:发光的尖端、主身体和红色手柄。当用户装备魔杖时,他们将其保持在 Part 命名为 Handle 的地方。

请确保只有一个 Part 被命名为 Handle 。如果您将多个 Parts 命名为 Handle ,工具将随机选择其中一个作为手部附件点,可能导致用户握剑而不是斧头的问题。

调整工具握住方向

如果您的工具握住方向不正确,例如在地面上拖动或面向后方,您可以在 属性 窗口中调整 握住 属性,属于 外观 类别下。

由于每个工具的理想握持角度各不相同,因此您需要尝试改变 握住前进 , 握住右侧握住上侧 属性,直到您的工具握住看起来正确为止。以下示例显示了魔杖可能的错误和正确握住方式:

工具在地面上拖动
工具向后面
工具正确地向导航

您还可以使用 GripPos 属性将用户角色从手中抵消工具。这可能有用于制作应该放在用户肩膀上的工具。

默认偏移(0,0,0)
工具抵消到肩部

自定义工具标志

用户拥有的工具存储在他们的 Backpack 中。用户可以在 行动栏 上查看每个工具的图标:

在工具的 属性 窗口中,使用以下属性来自定义工具在行动栏中的外观:

  • 纹理ID — 工具标志。将此属性的图像ID设置为与装饰和图像按钮相同的方式。
  • 工具提示 — 在悬停时的工具提示名称。

启用和禁用用户丢弃工具

默认情况下,用户可以通过按下 Windows 上的 返回键 或 Mac 上的 删除键 来丢弃工具。您可以通过设置工具的 可被丢弃 属性为 false 来禁用此选项。如果 CanBeDroppedfalse,按下 返回键删除键 将工具返回用户的背包。

将工具创建为库存物品

您还可以将没有零件或网格的经验工具作为库存物品,等待用户输入,例如用户角色可以单击其他人或触摸屏幕来投掷的魔法法术。库存物品工具不需要手柄,因此您需要在工具的 属性 窗口中取消检查 需要手柄 属性。

将工具添加到你的体验

一旦您完成设置体验工具,您需要将其放置在体验对象层次结构的正确区域。您在体验对象层次中放置工具的位置取决于其预期使用。

默认启动工具

如果您想让所有用户在启动时都带有工具在道具,请将其放入 新手包 文件夹。当任何用户生成时,系统将工具复制到他们的背包中。

收藏工具

如果您想允许用户在移移动工具时收集工具,您可以将工具放置在 工作区 中的 Explorer 层次中。例如,你可能想在体验世界的难以达到的区域放置超级火箭发射器。

获得并购买的工具

如果您想将工具设置为奖项,当用户做出特殊行为或将其出售在体验商店时,将工具放在 服务器存储 中的 资源管理器 层次中,可以在正确的时间将工具复制到用户的背包。

添加工具效果

在将工具添加到体验后,您可以添加脚本以启用用户使用工具进行特殊效果。

工具特定事件

您可以在工具脚本中使用以下四个工具特定条件来显示工具的状态和用户的输入与之:

虽然您在设计工具时可能不需要所有四个条件,但您可以使用以下代码脚本作为基本工具脚本模板:


local tool = script.Parent
local function onEquip()
print("The tool is now equipped.")
end
local function onUnequip()
print("The tool is now unequipped.")
end
local function onActivate()
print("The tool is now activated.")
end
local function onDeactivate()
print("The tool is now deactivated.")
end
tool.Equipped:Connect(onEquip)
tool.Unequipped:Connect(onUnequip)
tool.Activated:Connect(onActivate)
tool.Deactivated:Connect(onDeactivate)

本代码示例假定脚本是工具对象内的第一级子脚本。如果脚本在其他地方,则调整第 1 行上的路径 (tool 的值) 指向核心工具对象。

添加一个基本脚本

以下示例显示了在服务器上添加 Script 的步骤,可让用户通过单击屏幕切换白天和夜晚:

  1. 在 Explorer 窗口中,将鼠标悬停在工具对象上,然后单击 按钮插入 Script

  2. 复制以下代码,并将其粘贴到你的 Script


    local Lighting = game:GetService("Lighting")
    local tool = script.Parent
    local function onActivate()
    if Lighting.ClockTime >= 8 and Lighting.ClockTime < 16 then
    Lighting.ClockTime = 20
    else
    Lighting.ClockTime = 8
    end
    end
    tool.Activated:Connect(onActivate)
  3. 通过捡起工具然后单击体验屏幕上的任何地方来测试你的体验:

不同类型的脚本用于工具实现

一些工具仅需要服务器上的 Script 来实现,例如前面的示例,但大多数工具需要服务器上的 Script 和客户端上的 LocalScript 来管理工具的某些行为方面。

在添加脚本之前,请确保您理解每种脚本输入之间的核心差异:

  • 脚本 管理整个体验世界中所有用户可见的更改,例如打开门并射击箭。
  • 本地脚本 管理仅发生在用户设备上的事情,例如检测他们触摸或单击屏幕的位置。

以下是一些示例工具和其由本地脚本或服务器脚本管理的行为:

工具本地脚本服务器脚本
创造者魔杖检测玩家是否触摸或单击屏幕。在游戏世界中指定位置创建一个新部件,玩家触摸或单击了该部件。
隐形斗篷在披风装备时,暂时让玩家对所有其他用户隐形,直到披风被卸下。
超级弓检测玩家是否激活工具的时间(激活和禁用之间的时间)。射出具有更大或更小力量的魔法箭,取决于检测到的激活时间。

了解有关不同脚本类型的更多信息,请参阅脚本

排除问题的提示

工具可能在工作室中运行良好,但不适用于实时 Roblox 体验。如果发生这种情况,请使用以下提示进行故障排除:

了解有关 RemoteEvents 的更多信息,请参阅 远程事件和回调