Costruisci widget dello Studio

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

Studio ti dà il potere di creare widget personalizzati e usarli come strumenti e estensioni di Studio .Questi widget si comportano come finestre/pannelli personalizzati in Studio e puoi dockerizzarli all'interno della tua interfaccia o farli fluttuare come finestre separate.

Crea interfacce utente widget

Tutti i widget di Studio iniziano come oggetti DockWidgetPluginGui che puoi riempire con GuiObjects , come etichette di testo e pulsanti.Per creare una GUI or Intefaccia grafica utentevuota di un widget, chiama la funzione CreateDockWidgetPluginGui(), passando un ID e un oggetto DockWidgetPluginGuiInfo.

Nota che il costruttore DockWidgetPluginGuiInfo.new() attende i suoi parametri in un ordine specifico come segue:

#ProprietàTipoDescrizione
1Enum.InitialDockStateEnumerazioneUna delle enumerazioni Enum.InitialDockState 2.
2InitialEnabledBooleanoLo stato iniziale abilitato (visibile) della GUI or Intefaccia grafica utentedel widget.
3InitialEnabledShouldOverrideRestoreBooleanoSe vero, il valore di InitialEnabled sostituisce lo stato abilitato precedentemente salvato.
4FloatingXSizeInteroL'宽 iniziale della GUI quando InitialDockState è impostato su Enum.InitialDockState.Float .
5FloatingYSizeInteroL'altezza iniziale della GUI quando InitialDockState è impostato su Enum.InitialDockState.Float .
6MinWidthInteroLa larghezza minima della GUI or Intefaccia grafica utente, con alcune variazioni specifiche della piattaforma.
7MinHeightInteroL'altezza minima della GUI or Intefaccia grafica utente, con alcune variazioni specifiche della piattaforma.

-- Crea un nuovo oggetto "DockWidgetPluginGuiInfo"
local widgetInfo = DockWidgetPluginGuiInfo.new(
Enum.InitialDockState.Float, -- Il widget verrà inizializzato nel pannello fluttuante
true, -- Il widget verrà inizialmente abilitato
false, -- Non annullare lo stato precedentemente abilitato
200, -- Larghezza predefinita della finestra fluttuante
300, -- Altezza predefinita della finestra fluttuante
150, -- Larghezza minima della finestra fluttuante
150 -- Altezza minima della finestra fluttuante
)
-- Crea una nuova GUI or Intefaccia grafica utentewidget
local testWidget = plugin:CreateDockWidgetPluginGui("TestWidget", widgetInfo)
testWidget.Title = "Test Widget" -- Optional widget title

Personalizza l'interfaccia utente widget

Una volta creato un Widget, puoi personalizzare la sua interfaccia utente con GuiObjects ad esempio informativa TextLabels o interattiva ImageButtons .Ad esempio, il seguente codice aggiunge un codice di base TextButton alla finestra GUI:


-- Crea una nuova GUI or Intefaccia grafica utentewidget
local testWidget = plugin:CreateDockWidgetPluginGui("TestWidget", widgetInfo)
testWidget.Title = "Test Widget" -- Titolo opzionale del widget
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 = "Click Me"
testButton.Parent = testWidget

Cambia i temi di colore dello Studio

I widget di Studio effettivi idealmente corrispondono alla impostazione del tema Studio e si adattano dinamicamente quando il tema cambia.Ad esempio, se uno sviluppatore sta utilizzando il tema oscuro, il colore di sfondo del Widget, le immagini e le etichette del testo dovrebbero apparire belle a fianco dei colori del tema nativo di Studio.

L'aggiunta del seguente codice utilizza una funzione syncGuiColors() che viene inizialmente chiamata insieme a un tabella di oggetti GUI da sincronizzare.All'interno della funzione, un ciclo di funzioni nidate setColors() attraversa gli oggetti e sincronizza gli aspetti specifici di essi utilizzando GetColor() con Enum.StudioStyleGuideColor enumi.Questa funzione setColors() viene eseguita immediatamente per sincronizzare il tema Studio, poi viene collegata all'evento ThemeChanged per rilevare le modifiche future al tema.


testButton.Parent = testWidget
local function syncGuiColors(objects)
local function setColors()
for _, guiObject in objects do
-- Sincronizza colore di sfondo
guiObject.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.MainBackground)
-- Sincronizza il colore del testo
guiObject.TextColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.MainText)
end
end
-- Esegui la funzione 'setColors()' per sincronizzare inizialmente i colori
setColors()
-- Connetti l'evento 'ThemeChanged' alla funzione 'setColors()'
settings().Studio.ThemeChanged:Connect(setColors)
end
-- Esegui la funzione 'syncGuiColors()' per sincronizzare i colori degli oggetti forniti
syncGuiColors({testButton})

Personalizza i cursori del mouse

Per migliorare l'interazione prevista con gli elementi widget, puoi impostare i cursori del sistema specifici per gli eventi GUI , come MouseEnter e MouseLeave.Il seguente codice mostra come connettere una funzione agli eventi MouseEnter e MouseLeave di testButton per cambiare il cursore del mouse:


local function setCursor(cursorAsset)
plugin:GetMouse().Icon = cursorAsset
end
testButton.MouseEnter:Connect(function()
setCursor("rbxasset://SystemCursors/PointingHand")
end)
testButton.MouseLeave:Connect(function()
setCursor("")
end)

Fai riferimento alla seguente tabella per una lista di cursori del mouse e dei loro casi d'uso potenziali:

Icone del cursore del mouseAttivitàUsa caso
rbxasset://SystemCursors/ArrowClick e selezione predefiniti.
rbxasset://SystemCursors/PointingHandPassare il mouse su un link/pulsante attivo.
rbxasset://SystemCursors/OpenHandPassare il mouse su un Articolotrascinabile.
rbxasset://SystemCursors/ClosedHandTrascinare un Articolo.
rbxasset://SystemCursors/IBeamPassare il mouse in un campo di testo.
rbxasset://SystemCursors/SizeNSPassare il gestiresu una maniglia di ridimensionamento verticale.
rbxasset://SystemCursors/SizeEWPassare il mouse su un'impugnatura di ridimensionamento orizzontale.
rbxasset://SystemCursors/SizeNESWPassare il gestiresu un bordo della maniglia di ridimensionamento.
rbxasset://SystemCursors/SizeNWSEPassare il gestiresu un bordo della maniglia di ridimensionamento.
rbxasset://SystemCursors/SizeAllPassare il gestiresu una maniglia di ridimensionamento multi-direzionale.
rbxasset://SystemCursors/SplitNSPassare il gestiresu una maniglia verticale "divisa".
rbxasset://SystemCursors/SplitEWPassare il gestiresu una maniglia orizzontale "divisa".
rbxasset://SystemCursors/ForbiddenPassare il mouse su un Articolobloccato/proibito.
rbxasset://SystemCursors/WaitIndicare un'azione è in corso.
rbxasset://SystemCursors/BusyIndicare che il sistema è occupato.
rbxasset://SystemCursors/CrossPassare il mouse su un'area di selezione precisa.

Raccogli l'input dell'utente

Gli elementi dell'interfaccia utente come TextBox e TextButton funzionano normalmente nei widget di Studio e puoi costruire interfacce come faresti normalmente su Roblox.Tuttavia, UserInputService e ContextActionService non funzionano poiché questi servizi si aspettano che la finestra principale del gioco sia in primo piano.

Una soluzione per gli eventi di input generici è creare un Frame e sovrapporlo sull'intera schermata.Il seguente esempio di codice crea un frame e quando l'utente fa clic sul frame, l'evento GuiObject.InputBegan cattura l'input della tastiera sul frame fino a quando l'utente fa clic via:


local frame = Instance.new("Frame")
frame.BackgroundTransparency = 1 -- Nascondi il frame
frame.Size = UDim2.new(1, 0, 1, 0) -- Coprire lo schermo
frame.Position = UDim2.new(0, 0, 0, 0)
frame.Parent = testWidget
local function onInputBegan(inputObject)
-- Elabora l'oggetto di input qui, ad esempio rileva i tasti premuti
end
frame.InputBegan:Connect(onInputBegan)

Interazione trascina e rilascia

L'utilizzo delle interazioni trascina e rilascia per i tuoi widget è un semplice modo per migliorare il flusso di dati.Per creare questa interazione, devi definire l'elemento da trascinare, avviare il trascinamento, creare un bersaglio di rilascio e processare l'azione di rilascio.

Crea fonte di Sorgente

Puoi avviare un'azione di trascinamento chiamando Plugin:StartDrag() quando l'utente preme un pulsante del mouse su alcun elemento UI, tipicamente un TextButton o ImageButton all'interno di un Widget.Il seguente esempio di codice crea un singolo widget di finestra con un pulsante di testo all'interno.


-- Crea prima il widget
local widgetInfo = DockWidgetPluginGuiInfo.new(Enum.InitialDockState.Float, true, true, 300, 200)
local dragSourceWidget = plugin:CreateDockWidgetPluginGui("Drag Source", widgetInfo)
dragSourceWidget.Title = "Drag Source"
-- Crea un TextButton che inizierà il trascinamento
local dragButton = Instance.new("TextButton")
dragButton.Size = UDim2.new(1, 0, 1, 0)
dragButton.Text = "Drag me!"
dragButton.Parent = dragSourceWidget

Inizia il trascinamento

Quando l'utente fa clic sul TextButton, puoi iniziare a trascinare attraverso l'evento MouseButton1Down() che si attiva non appena l'utente preme il pulsante del mouse.

All'interno della funzione connessa, determina i dati da trascinare.Il tipo di dati deve essere riflesso nella chiave >, il contenuto del trascinamento deve essere riflesso nella chiave >, e il mittente deve descriversi nella chiave >.Vedi la pagina Plugin:StartDrag() per maggiori dettagli.


local function onButton1Down()
local dragInfo = {
Data = "Hello, world", -- I dati vengono trascinati
MimeType = "text/plain", -- Descrive il tipo MIME dei dati
Sender = "SomeDragSource", -- Descrive da dove sono originati i dati
MouseIcon = "", -- Contenuto immagine da utilizzare per il cursore
DragIcon = "", -- Contenuto dell'immagine da rendere sotto il cursore durante il trascinamento
HotSpot = Vector2.zero -- Dove sull'Icona di trascinamento per centrare il cursore
}
plugin:StartDrag(dragInfo)
end
dragButton.MouseButton1Down:Connect(onButton1Down)

Crea bersaglio di caduta

L'evento PluginGui.PluginDragDropped si attiva quando l'utente rilascia il mouse su una finestra durante un trascinamento.Quando ciò si verifica, devi definire un obiettivo di caduta come un secondo widget con un TextLabel per rilevare le cadute.


local dragTargetWidget = plugin:CreateDockWidgetPluginGui("Drop Target", widgetInfo)
dragTargetWidget.Title = "Drop Target"
-- Questo TextLabel mostrerà ciò che è stato lasciato cadere
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(1, 0, 1, 0)
textLabel.Text = "Drop here..."
textLabel.Parent = dragTargetWidget

Elabora l'azione di rilascio

Dopo aver creato un bersaglio di caduta, connetti l'evento PluginGui.PluginDragDropped sull' Widgetdel bersaglio di caduta:


local function onDragDrop(dragData)
print("PluginDragDropped")
if dragData.MimeType == "text/plain" then
textLabel.Text = dragData.Data
else
textLabel.Text = dragData.MimeType
end
end
dragTargetWidget.PluginDragDropped:Connect(onDragDrop)

Mentre un trascinamento è ancora in corso, questi tre eventi si attivano quando l'utente muove il mouse su un Widget:

  • PluginDragEntered – si accende quando l'utente passa il mouse su una finestra
  • PluginDragMoved – si accende ripetutamente quando l'utente muove il mouse su una finestra. Questo è utile per mostrare un Messaggio"Drop here!" .
  • PluginDragLeft – si attiva quando il cursore dell'utente lascia una finestra. Questo è utile per nascondere un Messaggio"Drop here!"