PluginGui 是一個抽象類型的 GUI,允許在 Roblox Studio 中展示 GuiObjects 在各種 Roblox Studio widgets。目前為止,唯一可用的 PluginGui 類型是 DockWidgetPluginGui,但未來可能會有更多!
概要
屬性
顯示在 PluginGui 內容上的標題。
切換此 LayerCollector 的可見度。
決定每次玩家的角色重生時,LayerCollector 會重設 (刪除自己並重新複製到玩家的 PlayerGui 中)。
控制 GuiObject.ZIndex 在此 LayerCollector 的所有子代上的行為。
描述介面元素的實際屏幕位置,以幣晃。
描述 UI 元素的實際螢幕旋轉度。
描述 UI 元素的實際屏幕尺寸,以幣晃。
設為真的時,本地化將適用於此 GuiBase2d 和它的後代。
一個引用 LocalizationTable 以應用自動本地化到這個 GuiBase2d 和它的後代。
在下向方向中自訂遊戲控制器選擇行為。
在左向方向中自訂遊戲控制器選擇行為。
自訂遊戲控制器選擇行為。
在上方向中自訂遊戲控制器選擇行為。
允許自訂遊戲控制器選擇動作。
方法
將一個函數綁定到 PluginGui 關閉按鈕,重置預設行為。
返回滑鼠相對於 PluginGui 的位置。
活動
發射時間發生在 Plugin:StartDrag() 拖動操作開始時,當使用者將鼠標放在 PluginGui 上時發生。
發射時間發生在 Plugin:StartDrag() 拖動操作開始時發生的 PluginGui 使用者鼠標入口時。
發射時,使用者的鼠標離開 Plugin:StartDrag() 的時候開始的拖動操作。
發生在 Plugin:StartDrag() 拖動操作開始時,當使用者的鼠標移動在 PluginGui 內。
發生時間,當使用者停止與 PluginGui 窗口互動。
發生在使用者開始與 PluginGui 窗口互動時。
- SelectionChanged(amISelected : bool,previousSelection : GuiObject,newSelection : GuiObject):RBXScriptSignal
發射在遊戲控制器選擇移動到,離開,或變更連接的 GuiBase2d 或任何子選項 GuiObjects。
屬性
方法
BindToClose
此功能將一個函數綁定到 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()
也看:
- DataModel:BindToClose(),可以用來將函數綁定到遊戲結束,不應與此功能混亂
參數
將關閉按鈕綁定到。如果沒有指定任何功能,則任何以前指定的功能將被解除綁定。
返回
GetRelativeMousePosition
GetRelativeMousePosition 返回 PluginGui 的左上角。 變更值只會發生,如果 Class.PluginGui 的輸入開始在 PluginGui 上,或者 Class.PluginGui 的輸入正在掌握視窗。
返回
滑鼠相對於 PluginGui 的位置。
範例程式碼
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() 上發生時發生時 。
也看:
參數
範例程式碼
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 應該在 PluginDragLeft 或 PluginDragDropped 發生時觸發藏。
也看:
參數
一個原始傳送至 Plugin:StartDrag() 的資料副本。
範例程式碼
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 發動時顯示。
也看:
參數
一個原始傳送至 Plugin:StartDrag() 的資料副本。
範例程式碼
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)
WindowFocusReleased
WindowFocusRelease 會在使用者與 PluginGui 窗口互動時立即發生,通常是通過點擊窗口外的某個東西來導致此事件。這些功能與同名的 UserInputService.WindowFocusReleased 事件相同。
如果使用者在焦點上移動到另一個 PluginGui 而他們沒有這個 PluginGui 在焦點上,則此事件在其他人的 WindowFocused 事件之前發生。但如果主遊戲窗口正在放入焦點,此事件在 後 將主遊戲
範例程式碼
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>
範例程式碼
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)