一个 插件 是一个扩展,它向工作室添加额外的功能或特性。您可以从创作者商店 安装 社区制作的插件,或者您可以 创建 和 发布 自己的插件到 工具箱,以便在您的体验中使用。
如果您选择将插件分发到创作者商店,您可以选择将其免费提供或以 美元 出售。Roblox 提供市场领先的收入分成,仅扣除税费和支付处理费用。如需有关销售插件的更多信息,请参见 创作者商店 - 分发和销售资产。
创建新插件
您可以创建自己的插件来改善您在工作室中的工作流程。以下代码示例是一个名为 AddEmptyScript 的插件,它插入一个空的 Script 作为 Instance 的子项或在 ServerScriptService 中。以下部分将解释创建此插件的主要部分。
首先,您应该在工作室设置的 工作室 部分启用 插件调试启用。这将在工作室中暴露 PluginDebugService,为您的插件代码提供实时调试,并使其更易于重新加载和保存。
AddEmptyScript 插件
local ServerScriptService = game:GetService("ServerScriptService")
local Selection = game:GetService("Selection")
-- 创建一个新的工具栏部分和标题为“自定义”的插件菜单文件夹
local toolbar = plugin:CreateToolbar("自定义")
-- 添加一个标签为“空脚本”的工具栏按钮
local newScriptButton = toolbar:CreateButton("空脚本", "创建一个空脚本", "rbxassetid://14978048121")
-- 使按钮在 3D 视窗隐藏时可点击
newScriptButton.ClickableWhenViewportHidden = true
local function onPluginButtonClicked()
local selectedObjects = Selection:Get()
local parent = selectedObjects[1] or ServerScriptService
local newScript = Instance.new("Script")
newScript.Source = ""
newScript.Parent = parent
end
newScriptButton.Click:Connect(onPluginButtonClicked)
保存插件脚本
要创建插件,首先在本地创建一个 Script 并保存。
在 ServerStorage 中插入一个新的 Script,并将其重命名为 AddEmptyScript。

将上述 AddEmptyScript 插件 代码复制并粘贴到新脚本中。
在 资源管理器 窗口中选中新脚本后,从工作室的 插件 菜单中选择 另存为本地插件。
在弹出窗口中,单击 保存,将插件脚本插入到工作室安装的本地 插件 文件夹中。
插件应出现在 PluginDebugService 中并开始运行。
添加工具栏按钮
要为您的插件在工作室工具栏的 插件 选项卡中添加一个按钮,请使用 Plugin:CreateToolbar() 和 PluginToolbar:CreateButton() 方法。在 AddEmptyScript 的代码中,第 5 行在工具栏和 插件 菜单文件夹中创建一个名为 自定义 的新部分,而第 8 行创建了一个标签为 空脚本 的按钮。

单击时执行代码
要使插件在用户点击工具栏按钮时执行代码,请将函数连接到按钮的 PluginToolbarButton.Click 事件。在 AddEmptyScript 的代码中,连接的函数是 onPluginButtonClicked()。
检查用户选择
要根据用户选择的内容修改插件的行为,请使用 Selection 服务。onPluginButtonClicked() 函数检查用户是否选择了任何内容,并将新脚本作为其子项创建,而不是在 ServerScriptService 中创建。如果用户没有选择任何内容,它将在 ServerScriptService 中创建新脚本。

支持撤销和重做
使用 ChangeHistoryService 允许用户撤销和重做插件在体验中所做的更改。在您的脚本中,设置插件调用 ChangeHistoryService:TryBeginRecording(),并在进行更改之前存储分配给 API 调用的标识符。然后在进行更改后设置插件调用 ChangeHistoryService:FinishRecording(),以便捕获在录制会话期间所做的任何更改,以便进行撤销和重做。
以下代码示例创建了一个示例插件,可以将霓虹材质应用于选定的零件。它使用 ChangeHistoryService 记录和管理插件所做的更改:
带有撤销和重做记录的示例材质插件
local ChangeHistoryService = game:GetService("ChangeHistoryService")
local Selection = game:GetService("Selection")
-- 创建一个示例插件
local toolbar = plugin:CreateToolbar("示例插件")
local button = toolbar:CreateButton("霓虹效果", "", "")
-- 将函数连接到点击事件
button.Click:Connect(function()
-- 尝试使用特定标识符开始录制
local recording = ChangeHistoryService:TryBeginRecording("将选择设置为霓虹")
-- 检查录制是否成功启动
if not recording then
-- 这表明您的插件已开始上一个录制但从未完成
-- 每个插件一次只能激活一个录制
return
end
-- 遍历所选实例
for _, instance in Selection:Get() do
-- 检查实例是否为 BasePart
if instance:IsA("BasePart") then
instance.Material = Enum.Material.Neon -- 将零件的材质设置为霓虹
end
end
-- 完成录制,将更改提交到历史记录
ChangeHistoryService:FinishRecording(recording, Enum.FinishRecordingOperation.Commit)
end)
上传插件
完成插件创建后,您可以将其上传到您的库存,以便在您所有的项目中访问。
要上传插件:
在 资源管理器 窗口中,选择一个插件脚本。
导航到工作室的 插件 菜单,然后选择 发布为插件。
- 可选在资产配置窗口的左上角,单击默认的拼图图标以上传插件的 512×512 图像缩略图。
填写以下字段:
- 名称 — 插件的标题。
- 描述 — 描述潜在用户可以期望插件做什么的描述。
- 创建者 — 您想要归属为插件创建者的创建者或组。
点击 提交 按钮。您的插件现在可以在 工具箱 的 库存 和 创作 选项卡下进行访问。
分发和销售插件
您可以在创作者商店公开分发和销售自己的插件,以供其他人在其游戏开发中使用。这种货币化方式使您在交易中获得 100% 的净收益,绕过平台费用和 DevEx 汇率。有关此过程的更多信息,包括如何设置卖家帐户以设置价格和接收付款,请参见 创作者商店 - 要求。
