PluginGui

顯示已棄用項目

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

無法建立
未複製

PluginGui 是一個抽象類型的 GUI,允許在 Roblox Studio 中展示 GuiObjects 在各種 Roblox Studio widgets。目前為止,唯一可用的 PluginGui 類型是 DockWidgetPluginGui,但未來可能會有更多!

概要

屬性

屬性 繼承自 LayerCollector屬性 繼承自 GuiBase2d

方法

活動

活動 繼承自 GuiBase2d

屬性

Title

平行讀取

顯示在 PluginGui 內容上的標題。預設值為空字串。

方法

BindToClose

void

此功能將一個函數綁定到 PluginGui 關閉按鈕,以覆蓋預設行為。

由預設值,當使用者在 PluginGui 的右上角的 Enabled 屬性設為 false 時,窗口關閉。 使用自訂函數綁定到關閉窗口時,此行為會被覆蓋,讓您可以檢查使用者是否真的想關閉窗口或提供

由此功能覆蓋的預設關閉行為,您需要設定 PluginGui 以手動關閉,設置 PluginGui.Enabled 為 關閉 。例如,在下面的示例中,用戶需要單擊確認按鈕關閉 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 = "Close?"
confirmButton.Parent = pluginGui
-- 聆聽點擊
confirmButton.Activated:Connect(function()
-- 關閉 gui
pluginGui.Enabled = false
-- 移除確認按鈕
confirmButton:Destroy()
end)
end)

您可以使用 BindToClose 無參數地 'unbind' 並重回上述的預設行為。例如:


pluginGui:BindToClose()

也看:

參數

function: function

將關閉按鈕綁定到。如果沒有指定任何功能,則任何以前指定的功能將被解除綁定。

預設值:"nil"

返回

void

GetRelativeMousePosition

外掛程式安全性

GetRelativeMousePosition 返回 PluginGui 的左上角。 變更值只會發生,如果 Class.PluginGui 的輸入開始在 PluginGui 上,或者 Class.PluginGui 的輸入正在掌握視窗。


返回

滑鼠相對於 PluginGui 的位置。

範例程式碼

PluginGui:GetRelativeMousePosition

local RunService = game:GetService("RunService")
local widgetInfo = DockWidgetPluginGuiInfo.new(
Enum.InitialDockState.Float,
true,
false, -- Enabled state, override
200,
300, -- Size
150,
150 -- Minimum size
)
local testWidget = plugin:CreateDockWidgetPluginGui("TestWidget", widgetInfo)
function update()
local v2 = testWidget:GetRelativeMousePosition()
testWidget.Title = ("(%d, %d)"):format(v2.x, v2.y)
end
RunService.Stepped:Connect(update)
update()

活動

PluginDragDropped

外掛程式安全性

拖曳拖曳發生在用戶在拖曳操作開始時將鼠標放在 PluginGui 上時發生時,用戶將鼠標放在 Plugin:StartDrag() 上發生時發生時

也看:

參數

dragData: Dictionary

範例程式碼

Plugin Drag and Drop

assert(plugin, "This script must be run as a Studio plugin")
local widgetInfo = DockWidgetPluginGuiInfo.new(Enum.InitialDockState.Float, true, true, 300, 200)
local dragSourceWidget = plugin:CreateDockWidgetPluginGui("Drag Source", widgetInfo)
dragSourceWidget.Title = "Drag Source"
local textBox = Instance.new("TextBox")
textBox.Parent = dragSourceWidget
textBox.Size = UDim2.new(1, 0, 0, 32)
textBox.Text = "Hello, plugin drags"
local dragButton = Instance.new("TextButton")
dragButton.Size = UDim2.new(1, 0, 1, -32)
dragButton.Position = UDim2.new(0, 0, 0, 32)
dragButton.Text = "Edit the text above, then start drag here"
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)
-- This widget will receive drops
local dragTargetWidget = plugin:CreateDockWidgetPluginGui("Drop Target", widgetInfo)
dragTargetWidget.Title = "Drop Target"
-- This TextLabel will display what was dropped
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(1, 0, 1, 0)
textLabel.Text = "Drop here..."
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

外掛程式安全性

拖曳入入器入力時發生 發生時,使用者的鼠標會在 PluginGui 中開始拖曳操作,由 Plugin:StartDrag() 發起。

此事件有助於顯示 PluginGuis 中的「放入此處」 UI,其中拖曳操作可以放下。此類 UI 應該在 PluginDragLeftPluginDragDropped 發生時觸發藏。

也看:

參數

dragData: Dictionary

一個原始傳送至 Plugin:StartDrag() 的資料副本。


範例程式碼

Plugin Drag and Drop

assert(plugin, "This script must be run as a Studio plugin")
local widgetInfo = DockWidgetPluginGuiInfo.new(Enum.InitialDockState.Float, true, true, 300, 200)
local dragSourceWidget = plugin:CreateDockWidgetPluginGui("Drag Source", widgetInfo)
dragSourceWidget.Title = "Drag Source"
local textBox = Instance.new("TextBox")
textBox.Parent = dragSourceWidget
textBox.Size = UDim2.new(1, 0, 0, 32)
textBox.Text = "Hello, plugin drags"
local dragButton = Instance.new("TextButton")
dragButton.Size = UDim2.new(1, 0, 1, -32)
dragButton.Position = UDim2.new(0, 0, 0, 32)
dragButton.Text = "Edit the text above, then start drag here"
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)
-- This widget will receive drops
local dragTargetWidget = plugin:CreateDockWidgetPluginGui("Drop Target", widgetInfo)
dragTargetWidget.Title = "Drop Target"
-- This TextLabel will display what was dropped
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(1, 0, 1, 0)
textLabel.Text = "Drop here..."
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

外掛程式安全性

拖曳左鍵發生時,當使用者的滑鼠離開 PluginGui 後,開始由 Plugin:StartDrag() 發起的拖曳操作時,會發生。 此事件和 PluginDragDropped 有助於隱藏 PluginGuis 上的「拖曳此處」 UI,可以讓拖曳操作被放下。這樣的 UI 應該在 PluginDragEntered 發動時顯示。

也看:

參數

dragData: Dictionary

一個原始傳送至 Plugin:StartDrag() 的資料副本。


範例程式碼

Plugin Drag and Drop

assert(plugin, "This script must be run as a Studio plugin")
local widgetInfo = DockWidgetPluginGuiInfo.new(Enum.InitialDockState.Float, true, true, 300, 200)
local dragSourceWidget = plugin:CreateDockWidgetPluginGui("Drag Source", widgetInfo)
dragSourceWidget.Title = "Drag Source"
local textBox = Instance.new("TextBox")
textBox.Parent = dragSourceWidget
textBox.Size = UDim2.new(1, 0, 0, 32)
textBox.Text = "Hello, plugin drags"
local dragButton = Instance.new("TextButton")
dragButton.Size = UDim2.new(1, 0, 1, -32)
dragButton.Position = UDim2.new(0, 0, 0, 32)
dragButton.Text = "Edit the text above, then start drag here"
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)
-- This widget will receive drops
local dragTargetWidget = plugin:CreateDockWidgetPluginGui("Drop Target", widgetInfo)
dragTargetWidget.Title = "Drop Target"
-- This TextLabel will display what was dropped
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(1, 0, 1, 0)
textLabel.Text = "Drop here..."
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

外掛程式安全性

拖動移動插件 發動時,當使用者的鼠標移動到 PluginGui 內的拖動操作開始時,發動了 Plugin:StartDrag() 的拖動操作。

也看:

參數

dragData: Dictionary

WindowFocusReleased

外掛程式安全性

WindowFocusRelease 會在使用者與 PluginGui 窗口互動時立即發生,通常是通過點擊窗口外的某個東西來導致此事件。這些功能與同名的 UserInputService.WindowFocusReleased 事件相同。

如果使用者在焦點上移動到另一個 PluginGui 而他們沒有這個 PluginGui 在焦點上,則此事件在其他人的 WindowFocused 事件之前發生。但如果主遊戲窗口正在放入焦點,此事件在 將主遊戲


範例程式碼

Detecting PluginGui Focus State

local info = DockWidgetPluginGuiInfo.new(Enum.InitialDockState.Float, true, true, 200, 50, 1, 1)
local widget = plugin:CreateDockWidgetPluginGui("TestWidget", info)
local function onFocusReleased()
widget.Title = "I'm not in focus :("
end
local function onFocused()
widget.Title = "I'm in focus :D"
end
widget.WindowFocusReleased:Connect(onFocusReleased)
widget.WindowFocused:Connect(onFocused)

WindowFocused

外掛程式安全性

WindowFocused 會在使用者與PluginGui的窗口互動時立即發生,通常是通過點擊它。這個功能與相同名稱的 UserInputService.WindowFocused 事件相同。它會在滑鼠按鈕相關的任何 GuiObject.InputBegan 事件之前發生。

如果另一個 PluginGui 在聚光燈中,而用戶將這個 PluginGui 聚光在用戶,則此事件會在另一個的 WindowFocusReleased 事件後發生。 但如果主遊戲窗口位於聚光燈中,則此事件會在 1>


範例程式碼

Detecting PluginGui Focus State

local info = DockWidgetPluginGuiInfo.new(Enum.InitialDockState.Float, true, true, 200, 50, 1, 1)
local widget = plugin:CreateDockWidgetPluginGui("TestWidget", info)
local function onFocusReleased()
widget.Title = "I'm not in focus :("
end
local function onFocused()
widget.Title = "I'm in focus :D"
end
widget.WindowFocusReleased:Connect(onFocusReleased)
widget.WindowFocused:Connect(onFocused)