概要
方法
代码示例
脚本 - 将插件全局传递给模块脚本
assert(plugin, "此脚本必须作为插件运行!")
-- 此后代码仅在脚本作为插件运行时执行
-- 加载模块并传递插件引用
local pluginModule = require(script.Parent.PluginModule)
pluginModule:Initialize(plugin)
-- 验证插件引用是否已初始化
pluginModule:CheckForPluginGlobal()模块脚本 - 接收并存储插件全局
local pluginModule = {}
local plugin -- 本地插件引用
-- 如果尚未设置,则初始化插件引用
function pluginModule:Initialize(pluginReference: Plugin)
if plugin ~= pluginReference then
plugin = pluginReference
else
error("插件已被初始化")
end
end
-- 检查插件引用是否设置并打印适当的信息
function pluginModule:CheckForPluginGlobal()
if plugin ~= nil then
print("插件引用已设置!")
else
warn("插件引用丢失!")
end
end
return pluginModuleAPI 参考
属性
方法
CreateDockWidgetPluginGui
CreateDockWidgetPluginGuiAsync
Plugin:CreateDockWidgetPluginGuiAsync(
参数
代码示例
小部件 GUI 文本按钮
-- 创建新的 'DockWidgetPluginGuiInfo' 对象
local widgetInfo = DockWidgetPluginGuiInfo.new(
Enum.InitialDockState.Float, -- 小部件将在浮动面板中初始化
true, -- 小部件将最初处于启用状态
false, -- 不覆盖之前的启用状态
200, -- 浮动窗口的默认宽度
300, -- 浮动窗口的默认高度
150, -- 浮动窗口的最小宽度(可选)
150 -- 浮动窗口的最小高度(可选)
)
-- 创建新的小部件 GUI
local testWidget = plugin:CreateDockWidgetPluginGuiAsync("TestWidget", widgetInfo)
local testButton = Instance.new("TextButton")
testButton.BorderSizePixel = 0
testButton.TextSize = 20
testButton.TextColor3 = Color3.new(1, 0.2, 0.4)
testButton.AnchorPoint = Vector2.new(0.5, 0.5)
testButton.Size = UDim2.new(1, 0, 1, 0)
testButton.Position = UDim2.new(0.5, 0, 0.5, 0)
testButton.SizeConstraint = Enum.SizeConstraint.RelativeYY
testButton.Text = "点击我"
testButton.Parent = testWidgetCreatePluginAction
代码示例
创建一个 PluginAction
local pluginAction = plugin:CreatePluginAction(
"HelloWorldAction",
"Hello World",
"打印 'Hello world!'",
"rbxasset://textures/sparkle.png",
true
)
pluginAction.Name = "测试动作"
local function actionTriggered()
print("Hello world!")
end
pluginAction.Triggered:Connect(actionTriggered)CreatePluginMenu
代码示例
创建一个 PluginMenu 和 PluginMenuAction
-- 此代码可以粘贴到命令栏中,但只能执行一次
local pluginMenu = plugin:CreatePluginMenu(math.random(), "测试菜单")
pluginMenu.Name = "测试菜单"
pluginMenu:AddNewAction("操作A", "A", "rbxasset://textures/loading/robloxTiltRed.png")
pluginMenu:AddNewAction("操作B", "B", "rbxasset://textures/loading/robloxTilt.png")
local subMenu = plugin:CreatePluginMenu(math.random(), "C", "rbxasset://textures/explosion.png")
subMenu.Name = "子菜单"
subMenu:AddNewAction("操作D", "D", "rbxasset://textures/whiteCircle.png")
subMenu:AddNewAction("操作E", "E", "rbxasset://textures/icon_ROBUX.png")
pluginMenu:AddMenu(subMenu)
pluginMenu:AddSeparator()
pluginMenu:AddNewAction("操作F", "F", "rbxasset://textures/sparkle.png")
local toggle = Instance.new("BoolValue")
toggle.Name = "切换插件菜单"
toggle.Parent = workspace
local function onToggled()
if toggle.Value then
toggle.Value = false
local selectedAction = pluginMenu:ShowAsync()
if selectedAction then
print("选择的操作:", selectedAction.Text, "操作Id:", selectedAction.ActionId)
else
print("用户没有选择操作!")
end
end
end
toggle.Changed:Connect(onToggled)CreateToolbar
参数
代码示例
插件:创建工具栏
plugin:CreateToolbar("示例工具栏")Deactivate
Plugin:Deactivate():()
返回
()
GetMouse
代码示例
插件:获取鼠标
local mouse = plugin:GetMouse()
local function button1Down()
print("来自插件鼠标的按钮 1 被按下")
end
mouse.Button1Down:Connect(button1Down)GetSelectedRibbonTool
代码示例
插件:获取选定的Ribbon工具
plugin:SelectRibbonTool(Enum.RibbonTool.Move, UDim2.new())
task.wait() -- 等待下一帧
local selectedRibbonTool = plugin:GetSelectedRibbonTool()
print("选定的Ribbon工具是", selectedRibbonTool)GetSetting
GetStudioUserId
ImportFbxAnimation
ImportFbxAnimationAsync
ImportFbxRig
Negate
Plugin:Negate(objects:Instances):Instances
参数
objects:Instances |
返回
Instances
OpenScript
OpenWikiPage
PromptForExistingAssetId
PromptForExistingAssetIdAsync
PromptSaveSelection
PromptSaveSelectionAsync
SaveSelectedToRoblox
Plugin:SaveSelectedToRoblox():()
返回
()
SelectRibbonTool
参数
返回
()
Separate
Plugin:Separate(objects:Instances):Instances
参数
objects:Instances |
返回
Instances
SetSetting
参数
value:Variant |
返回
()
代码示例
插件:GetSetting 和 插件:SetSetting
local RAN_BEFORE_KEY = "RunBefore"
local hasRunBefore = plugin:GetSetting(RAN_BEFORE_KEY)
if hasRunBefore then
print("欢迎回来!")
else
print("感谢您安装这个插件!")
plugin:SetSetting(RAN_BEFORE_KEY, true)
endStartDrag
参数
返回
()
代码示例
插件拖放
assert(plugin, "此脚本必须作为 Studio 插件运行")
local widgetInfo = DockWidgetPluginGuiInfo.new(Enum.InitialDockState.Float, true, true, 300, 200)
local dragSourceWidget = plugin:CreateDockWidgetPluginGuiAsync("拖动源", widgetInfo)
dragSourceWidget.Title = "拖动源"
local textBox = Instance.new("TextBox")
textBox.Parent = dragSourceWidget
textBox.Size = UDim2.new(1, 0, 0, 32)
textBox.Text = "你好,插件拖动"
local dragButton = Instance.new("TextButton")
dragButton.Size = UDim2.new(1, 0, 1, -32)
dragButton.Position = UDim2.new(0, 0, 0, 32)
dragButton.Text = "编辑上面的文本,然后在这里开始拖动"
dragButton.Parent = dragSourceWidget
function onMouseButton1Down()
local dragData = {
Sender = "SomeDragSource",
MimeType = "text/plain",
Data = textBox.Text,
MouseIcon = "",
DragIcon = "",
HotSpot = Vector2.new(0, 0),
}
plugin:StartDrag(dragData)
end
dragButton.MouseButton1Down:Connect(onMouseButton1Down)
-- 这个小部件将接收放置
local dragTargetWidget = plugin:CreateDockWidgetPluginGuiAsync("放置目标", widgetInfo)
dragTargetWidget.Title = "放置目标"
-- 这个 TextLabel 将显示被放置的内容
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(1, 0, 1, 0)
textLabel.Text = "放置在这里..."
textLabel.Parent = dragTargetWidget
local function onDragDrop(dragData)
if dragData.MimeType == "text/plain" then
textLabel.Text = dragData.Data
else
textLabel.Text = dragData.MimeType
end
end
dragTargetWidget.PluginDragDropped:Connect(onDragDrop)
dragTargetWidget.PluginDragEntered:Connect(function(_dragData)
print("PluginDragEntered")
end)
dragTargetWidget.PluginDragLeft:Connect(function(_dragData)
print("PluginDragLeft")
end)
dragTargetWidget.PluginDragMoved:Connect(function(_dragData)
print("PluginDragMoved")
end)活动