PluginGui

显示已弃用

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

无法创建
未复制

PluginGui 是一个抽象类,用于在各种 Roblox Studio 小工具中显示 GuiObjects。截至目前,唯一可用的 PluginGui 类型是 DockWidgetPluginGui,但未来可能会有更多类型!

概要

属性

继承自LayerCollector的属性

属性

继承自GuiBase2d的属性

属性

方法

活动

继承自GuiBase2d的活动

活动

属性

Title

读取并联

显示在 PluginGui 内容上方的标题。 默认为空字符串。

方法

BindToClose

()

此函数将一个函数绑定到 PluginGui 的关闭按钮, 覆盖默认行为。

默认情况下,当用户点击 PluginGui 右上角的 'x' 按钮时, Enabled 属性会被设置为 false,关闭窗口。 当通过 BindToClose 绑定一个自定义函数时,此行为会被覆盖, 允许你检查用户是否真的想关闭窗口或给予他们保存工作的机会。

由于默认关闭行为被此函数覆盖,你需要通过将 PluginGui.Enabled 设置为 false 手动配置 PluginGui 关闭。例如,在下面的代码片段中,用户需要点击确认按钮以关闭 GUI:


local closing = false
pluginGui:BindToClose(function()
-- 确保我们没有已经制作按钮
if closing then
return
end
closing = true
-- 创建确认按钮
local confirmButton = Instance.new("TextButton")
confirmButton.AnchorPoint = Vector2.new(0.5, 0.5)
confirmButton.Size = UDim2.new(0.5, 0, 0.5, 0)
confirmButton.Position = UDim2.new(0.5, 0, 0.5, 0)
confirmButton.BackgroundColor3 = Color3.new(1, 0, 0)
confirmButton.Text = "关闭?"
confirmButton.Parent = pluginGui
-- 监听点击事件
confirmButton.Activated:Connect(function()
-- 关闭 GUI
pluginGui.Enabled = false
-- 移除确认按钮
confirmButton:Destroy()
end)
end)

你可以不带参数调用 BindToClose 以“解绑”并恢复默认行为,如下所示:


pluginGui:BindToClose()

另见:

参数

function: function

要绑定到关闭按钮的函数。如果未指定函数,则会取消绑定任何先前指定的函数。

默认值:"nil"

返回

()

GetRelativeMousePosition

插件安全性

GetRelativeMousePosition 返回鼠标相对于 PluginGui 左上角的位置。 返回值仅在鼠标输入开始于 PluginGui 或者鼠标当前悬停在窗口上时发生变化。


返回

相对于 PluginGui 的鼠标屏幕位置(以像素为单位)。

代码示例

插件图形用户界面:获取相对鼠标位置

local RunService = game:GetService("RunService")
local widgetInfo = DockWidgetPluginGuiInfo.new(
Enum.InitialDockState.Float,
true,
false, -- 启用状态,覆盖
200,
300, -- 尺寸
150,
150 -- 最小尺寸
)
local testWidget = plugin:CreateDockWidgetPluginGui("测试小部件", widgetInfo)
function update()
local v2 = testWidget:GetRelativeMousePosition()
testWidget.Title = ("(%d, %d)"):format(v2.x, v2.y)
end
RunService.Stepped:Connect(update)
update()

活动

PluginDragDropped

插件安全性

PluginDragDropped 在用户在拖动操作期间释放鼠标到 PluginGui 上时触发,该拖动操作由 Plugin:StartDrag() 启动。

另见:

参数

dragData: Dictionary

代码示例

本代码示例创建了两个插件小部件窗口:一个拖动源和一个放置目标。在源窗口中,脚本创建了一个 TextBoxTextButton 以允许用户开始插件拖动操作。放置目标窗口将使用 TextLabel 显示拖入的内容的 MimeType。如果 MimeType 是 text/plain,它将显示纯文本数据。

要将此代码示例作为插件运行,请将其粘贴到一个 Script 中。然后,在资源管理器窗口中右键单击脚本并选择“保存为本地插件”。

插件拖放

assert(plugin, "该脚本必须作为 Studio 插件运行")
local widgetInfo = DockWidgetPluginGuiInfo.new(Enum.InitialDockState.Float, true, true, 300, 200)
local dragSourceWidget = plugin:CreateDockWidgetPluginGui("拖动源", 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:CreateDockWidgetPluginGui("放置目标", 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)

PluginDragEntered

插件安全性

PluginDragEntered 在用户的鼠标在拖动操作期间进入 PluginGui 时触发,该拖动操作由 Plugin:StartDrag() 启动。

此事件对于在可投放的 PluginGui 上显示“在此投放” UI 非常有用。此类 UI 应在 PluginDragLeftPluginDragDropped 触发时隐藏。

另见:

参数

dragData: Dictionary

一份最初传递给 Plugin:StartDrag() 的数据的副本。


代码示例

本代码示例创建了两个插件小部件窗口:一个拖动源和一个放置目标。在源窗口中,脚本创建了一个 TextBoxTextButton 以允许用户开始插件拖动操作。放置目标窗口将使用 TextLabel 显示拖入的内容的 MimeType。如果 MimeType 是 text/plain,它将显示纯文本数据。

要将此代码示例作为插件运行,请将其粘贴到一个 Script 中。然后,在资源管理器窗口中右键单击脚本并选择“保存为本地插件”。

插件拖放

assert(plugin, "该脚本必须作为 Studio 插件运行")
local widgetInfo = DockWidgetPluginGuiInfo.new(Enum.InitialDockState.Float, true, true, 300, 200)
local dragSourceWidget = plugin:CreateDockWidgetPluginGui("拖动源", 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:CreateDockWidgetPluginGui("放置目标", 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)

PluginDragLeft

插件安全性

PluginDragLeft 在用户的鼠标在拖动操作期间离开 PluginGui 时触发,该拖动操作由 Plugin:StartDrag() 启动。

此事件和 PluginDragDropped 对于隐藏可投放的 PluginGui 上的“在此投放” UI 非常有用。当 PluginDragEntered 被触发时,该 UI 应显示。

另见:

参数

dragData: Dictionary

一份最初传递给 Plugin:StartDrag() 的数据的副本。


代码示例

本代码示例创建了两个插件小部件窗口:一个拖动源和一个放置目标。在源窗口中,脚本创建了一个 TextBoxTextButton 以允许用户开始插件拖动操作。放置目标窗口将使用 TextLabel 显示拖入的内容的 MimeType。如果 MimeType 是 text/plain,它将显示纯文本数据。

要将此代码示例作为插件运行,请将其粘贴到一个 Script 中。然后,在资源管理器窗口中右键单击脚本并选择“保存为本地插件”。

插件拖放

assert(plugin, "该脚本必须作为 Studio 插件运行")
local widgetInfo = DockWidgetPluginGuiInfo.new(Enum.InitialDockState.Float, true, true, 300, 200)
local dragSourceWidget = plugin:CreateDockWidgetPluginGui("拖动源", 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:CreateDockWidgetPluginGui("放置目标", 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)

PluginDragMoved

插件安全性

PluginDragMoved 在用户的鼠标在拖动操作期间在 PluginGui 内移动时触发,该拖动操作由 Plugin:StartDrag() 启动。

另见:

参数

dragData: Dictionary

WindowFocusReleased

插件安全性

WindowFocusReleased 用户停止与 PluginGui 的窗口交互时立即触发, 通常是通过点击窗口外的某个东西。该事件的功能与同名的 UserInputService.WindowFocusReleased 事件相似。

如果焦点正在转移到另一个 PluginGui,而用户在此 PluginGui 上有焦点,则此事件会在另一个的 WindowFocused 事件之前触发。,但是, 如果主游戏窗口获得焦点,则此事件会在 UserInputService.WindowFocused 之后触发。


代码示例

此代码示例演示了如何使用 WindowFocused()WindowFocusReleased() 事件跟踪 PluginGui 的聚焦状态。它会根据聚焦状态的变化更改 Title()

检测 PluginGui 聚焦状态

local info = DockWidgetPluginGuiInfo.new(Enum.InitialDockState.Float, true, true, 200, 50, 1, 1)
local widget = plugin:CreateDockWidgetPluginGui("测试小部件", info)
local function onFocusReleased()
widget.Title = "我没有聚焦 :("
end
local function onFocused()
widget.Title = "我在聚焦 :D"
end
widget.WindowFocusReleased:Connect(onFocusReleased)
widget.WindowFocused:Connect(onFocused)

WindowFocused

插件安全性

WindowFocused 用户开始与 PluginGui 的窗口交互时立即触发, 通常是通过点击它。该事件的功能与同名的 UserInputService.WindowFocused 事件相似。它在任何相关的 GuiObject.InputBegan 鼠标按钮事件之前触发。

如果另一个 PluginGui 处于焦点状态,并且用户聚焦此 PluginGui, 则此事件在另一个的 WindowFocusReleased 事件之后触发。然而, 如果主游戏窗口处于焦点状态,则此事件在 UserInputService.WindowFocusReleased 之后触发。


代码示例

此代码示例演示了如何使用 WindowFocused()WindowFocusReleased() 事件跟踪 PluginGui 的聚焦状态。它会根据聚焦状态的变化更改 Title()

检测 PluginGui 聚焦状态

local info = DockWidgetPluginGuiInfo.new(Enum.InitialDockState.Float, true, true, 200, 50, 1, 1)
local widget = plugin:CreateDockWidgetPluginGui("测试小部件", info)
local function onFocusReleased()
widget.Title = "我没有聚焦 :("
end
local function onFocused()
widget.Title = "我在聚焦 :D"
end
widget.WindowFocusReleased:Connect(onFocusReleased)
widget.WindowFocused:Connect(onFocused)