GuiObject
*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.
GuiObject ist eine abstrakte Klasse (ähnlich wie BasePart ) für ein Objekt.Es definiert alle Eigenschaften, die sich auf die Anzeige eines grafischen Benutzeroberflächs (grafische Benutzeroberfläche) beziehen, wie Size und Position.Es hat auch einige nützliche lesbare Eigenschaften wie AbsolutePosition , AbsoluteSize und AbsoluteRotation .
Um die Anordnung von GUI-Objekten auf besondere Weise zu manipulieren, kannst du eine Layoutstruktur wie Liste/Flex oder Gitter verwenden, und du kannst sie über Aussehensmodifizierer außerhalb ihrer Kern属性 gestalten.
Obwohl es möglich ist, Maus-Button-Ereignisse auf jedem GUI-Objekt mit InputBegan und InputEnded zu erkennen, haben nur ImageButton und TextButton praktische dedizierte Ereignisse wie Activated zum Erkennen von Klicks/Drücken.
Zusammenfassung
Eigenschaften
Bestimmt, ob dieses UI-Element Eingabe sinkt.
Legt den Ursprungspunkt eines GuiObject fest, bezogen auf seine absolute Größe.
Bestimmt, ob die Größenänderung basierend auf dem Inhalt des Kindes erfolgt.
Bestimmt die GuiObject Hintergrundfarbe.
Bestimmt die Transparenz des Hintergrunds und der Grenze GuiObject.
Bestimmt die Farbe des GuiObject-Randes.
Bestimmt, auf welche Weise die GuiObject Grenze in Bezug auf ihre Dimensionen angeordnet wird.
Bestimmt die Pixelf宽te des GuiObject Randes.
Bestimmt, ob ein Nachkomme GuiObjects außerhalb der Grenzen eines Eltern-GUI-Elements rendernwerden soll.
Bestimmt, ob die Maus des Spieler:inaktiv auf der GuiObject gedrückt wird oder nicht.
Bestimmt, ob die GuiButton mit dem Interagieren kann oder nicht, oder ob sich die GuiState des GuiObject ändert oder nicht.
Steuert die Sortierreihenfolge der GuiObject, wenn sie mit einem UIGridStyleLayout verwendet wird.
Legt das GuiObject, was ausgewählt wird, wenn der Gamepad-Auswahlknopf nach unten verschoben wird.
Legt das GuiObject, was ausgewählt wird, wenn der Gamepad-Auswahlsteller nach links verschoben wird.
Setzt das GuiObject, das ausgewählt wird, wenn der Gamepad-Auswahlbereich nach rechts verschoben wird.
Legt das GuiObject, was ausgewählt wird, wenn der Gamepad-Auswahlsteller nach oben verschoben wird.
Bestimmt die Pixel- und Skalarposition des GuiObject.
Bestimmt die Anzahl der Grad, um die sich der GuiObject dreht.
Bestimmen, ob die GuiObject von einem Gamepad ausgewählt werden kann.
Übernimmt die Standardauswahlverzierung, die für Gamepads verwendet wird.
Die Reihenfolge von GuiObjects, die vom Gamepad-UI-Auswahl angezeigt wird.
Bestimmt die Pixelform und Skalierung der GuiObject .
Legt die Size-Achsen fest, auf denen die GuiObject basieren wird, im Verhältnis zur Größe ihres übergeordnetes Teil.
Eine gemischte Eigenschaft von BackgroundTransparency und TextTransparency.
Bestimmt, ob die GuiObject und ihre Nachkommen gerendert werden.
Bestimmt die Reihenfolge, in der ein GuiObject in Bezug auf andere gerendert wird.
Beschreibt die tatsächliche Bildschirmposition eines GuiBase2d Elements, in Pixeln.
Beschreibt die tatsächliche Bildschirm rotation eines GuiBase2d Elements, in Grad.
Beschreibt die tatsächliche Bildschirmgröße eines GuiBase2d Elements, in Pixeln.
Wenn es auf true gesetzt wird, wird die Lokalisierung auf dieses GuiBase2d und seine Nachkommen angewendet.
Eine Referenz auf ein LocalizationTable , das verwendet werden soll, um automatisierte Lokalisierung auf dieses GuiBase2d und seine Nachkommen anzuwenden.
Passt das Spielpadauswahlverhalten in die Down-Richtung an.
Passt das Spielpadauswahlverhalten in die linke Richtung an.
Passt das Spielpadauswahlverhalten in die richtige Richtung an.
Passt das Spielpadauswahlverhalten in die Richtung oben an.
Ermöglicht die Anpassung der Gamepad-Auswahlbewegung.
Methoden
- TweenPosition(endPosition : UDim2,easingDirection : Enum.EasingDirection,easingStyle : Enum.EasingStyle,time : number,override : boolean,callback : function):boolean
Bewegt eine GUI reibungslos zu einem neuen UDim2.
- TweenSize(endSize : UDim2,easingDirection : Enum.EasingDirection,easingStyle : Enum.EasingStyle,time : number,override : boolean,callback : function):boolean
- TweenSizeAndPosition(endSize : UDim2,endPosition : UDim2,easingDirection : Enum.EasingDirection,easingStyle : Enum.EasingStyle,time : number,override : boolean,callback : function):boolean
Bewegt eine GUI reibungslos zu einer neuen Größe und Position.
Ereignisse
Feuert, wenn ein Benutzer beginnt, über ein Mensch-Computer-Schnittstellen-Gerät zu interagieren (Mausknopf unten, Berührung beginnen, Tastaturknopf unten usw.).
Feuert, wenn ein Benutzer ändert, wie er über ein Mensch-Computer-Schnittstellen-Gerät interagiert (Mausknopf unten, Berührung beginnen, Tastaturknopf unten usw.).
Feuert, wenn ein Benutzer die Interaktion über ein Mensch-Computer-Schnittstellen-Gerät (Mausknopf unten, Berührung beginnen, Tastaturknopf unten usw.) beendet.
Feuert, wenn ein Benutzer seine Maus in ein GUI-Element bewegt.
Feuert, wenn ein Benutzer seine Maus aus einem GUI-Element heraus bewegt.
Feuert immer dann, wenn ein Benutzer seine Maus bewegt, während sie sich innerhalb eines GUI-Elements befindet.
Feuert, wenn ein Benutzer das Mobilrad zurück scrollt, wenn die Maus über ein GUI-Element ist.
Feuert, wenn ein Benutzer sein Mausrad nach vorne scrollt, wenn die Maus über ein GUI-Element ist.
Feuert ab, wenn das GuiObject mit dem Gamepad-Auswahlgerät fokussiert wird.
Feuert, wenn der Gamepad-Auswahlstoppt sich auf das GuiObject zu konzentrieren.
Feuert, wenn der Spieler startet, fortsetzt und lange auf das UI-Element drückt.
- TouchPan(touchPositions : Array,totalTranslation : Vector2,velocity : Vector2,state : Enum.UserInputState):RBXScriptSignal
Feuert, wenn der Spieler seinen Finger auf das UI-Element bewegt.
- TouchPinch(touchPositions : Array,scale : number,velocity : number,state : Enum.UserInputState):RBXScriptSignal
Feuert, wenn der Spieler eine Pinch- oder Pull-Geste ausführt, indem er zwei Finger auf das UI-Element legt.
- TouchRotate(touchPositions : Array,rotation : number,velocity : number,state : Enum.UserInputState):RBXScriptSignal
Feuert, wenn der Spieler eine Rotationsgeste mit zwei Fingern auf dem UI-Element ausführt.
Feuert, wenn der Spieler eine Wischgeste auf dem UI-Element ausführt.
Feuert, wenn der Spieler eine Tap-Geste auf dem UI-Element ausführt.
- SelectionChanged(amISelected : boolean,previousSelection : GuiObject,newSelection : GuiObject):RBXScriptSignal
Feuert, wenn die Auswahl des Gamepads sich auf, verlässt oder ändert innerhalb der verbundenen GuiBase2d oder eines Nachkommens GuiObjects.
Eigenschaften
Active
Diese Eigenschaft bestimmt, ob die GuiObject Eingabe in den Platzsinkt, wie z. B. unterliegende Modelle mit einer ClickDetector Klasse wie DragDetector.
Für GuiButton Objekte ( ImageButton und TextButton ), bestimmt diese Eigenschaft, ob Activated Feuer ausgelöst werden ( AutoButtonColor wird auch für diese funktionieren).Die Ereignisse InputBegan, InputChanged und InputEnded arbeiten normal, unabhängig vom Wert dieser Eigenschaften.
Code-Beispiele
This code sample demonstrates the usage of the Active property as a debounce for the Activated event.
-- Place this LocalScript within a TextButton (or ImageButton)
local textButton = script.Parent
textButton.Text = "Click me"
textButton.Active = true
local function onActivated()
-- This acts like a debounce
textButton.Active = false
-- Count backwards from 5
for i = 5, 1, -1 do
textButton.Text = "Time: " .. i
task.wait(1)
end
textButton.Text = "Click me"
textButton.Active = true
end
textButton.Activated:Connect(onActivated)
AnchorPoint
Diese Eigenschaft legt den Ursprungspunkt eines GuiObject fest, bezogen auf seine absolute Größe.Der Ursprungspunkt bestimmt, von wo das Element positioniert ist (durch ) und von dem aus es erweitert wird.
Siehe hier für illustrierte Diagramme und Details.
Code-Beispiele
Dieses Codebeispiel verschiebt ein UI-Element auf unterschiedliche Seiten des Eltern元素.Es beginnt oben links und endet unten rechts.Fügen Sie in ein Lokales Skript in einem Frame, innerhalb eines ScreenGIs, ein.
local guiObject = script.Parent
while true do
-- Oben links
guiObject.AnchorPoint = Vector2.new(0, 0)
guiObject.Position = UDim2.new(0, 0, 0, 0)
task.wait(1)
-- Oben
guiObject.AnchorPoint = Vector2.new(0.5, 0)
guiObject.Position = UDim2.new(0.5, 0, 0, 0)
task.wait(1)
-- Oben rechts
guiObject.AnchorPoint = Vector2.new(1, 0)
guiObject.Position = UDim2.new(1, 0, 0, 0)
task.wait(1)
-- Linker
guiObject.AnchorPoint = Vector2.new(0, 0.5)
guiObject.Position = UDim2.new(0, 0, 0.5, 0)
task.wait(1)
-- Todeszentrum
guiObject.AnchorPoint = Vector2.new(0.5, 0.5)
guiObject.Position = UDim2.new(0.5, 0, 0.5, 0)
task.wait(1)
-- Rechts
guiObject.AnchorPoint = Vector2.new(1, 0.5)
guiObject.Position = UDim2.new(1, 0, 0.5, 0)
task.wait(1)
-- Unten links
guiObject.AnchorPoint = Vector2.new(0, 1)
guiObject.Position = UDim2.new(0, 0, 1, 0)
task.wait(1)
-- Unten
guiObject.AnchorPoint = Vector2.new(0.5, 1)
guiObject.Position = UDim2.new(0.5, 0, 1, 0)
task.wait(1)
-- Unten rechts
guiObject.AnchorPoint = Vector2.new(1, 1)
guiObject.Position = UDim2.new(1, 0, 1, 0)
task.wait(1)
end
AutomaticSize
Diese Eigenschaft wird verwendet, um die Größe der übergeordneten UI-Objekte automatisch anhand der Größe ihrer Nachkommen zu skalieren.Sie können diese Eigenschaft verwenden, um Text und andere Inhalte dynamisch zu einem UI-Objekt hinzuzufügen, entweder zur Bearbeitungszeit oder zur Laufzeit, und die Größe wird angepasst, um diesem Inhalt zu entsprechen.
Wenn AutomaticSize auf einen Enum.AutomaticSize Wert festgelegt wird, der nicht None ist, kann sich dieses UI-Objekt je nach seinem Kinderkontent vergrößern.
Für weitere Informationen darüber, wie diese Eigenschaft verwendet wird und wie sie funktioniert, siehe hier.
Code-Beispiele
Das folgende Skript erstellt einen automatisch skalierten Elternrahmen mit einem UIListLayout , und fügt dann mehrere automatisch skalierte TextLabel Objekte ein.Beachten Sie, wie sich der Eltern UIListLayout automatisch vergrößert, um seinen Kinderkontent zu passen, und wie sich die Label automatisch vergrößern, um ihren Textinhalt zu passen.Dieses Skript kann einem ScreenGui zugewiesen werden.
-- Array von Text-Etiketten/Schriften/Größen zum Ausgeben
local labelArray = {
{ text = "Lorem", font = Enum.Font.Creepster, size = 50 },
{ text = "ipsum", font = Enum.Font.IndieFlower, size = 35 },
{ text = "dolor", font = Enum.Font.Antique, size = 55 },
{ text = "sit", font = Enum.Font.SpecialElite, size = 65 },
{ text = "amet", font = Enum.Font.FredokaOne, size = 40 },
}
-- Erstellen eines automatisch skalierten Elternrahmens
local parentFrame = Instance.new("Frame")
parentFrame.AutomaticSize = Enum.AutomaticSize.XY
parentFrame.BackgroundColor3 = Color3.fromRGB(90, 90, 90)
parentFrame.Size = UDim2.fromOffset(25, 100)
parentFrame.Position = UDim2.fromScale(0.1, 0.1)
parentFrame.Parent = script.Parent
-- Füge ein Listenlayout hinzu
local listLayout = Instance.new("UIListLayout")
listLayout.Padding = UDim.new(0, 5)
listLayout.Parent = parentFrame
-- Runde Ecken und Polsterung für visuelle Ästhetik festlegen
local roundedCornerParent = Instance.new("UICorner")
roundedCornerParent.Parent = parentFrame
local uiPaddingParent = Instance.new("UIPadding")
uiPaddingParent.PaddingTop = UDim.new(0, 5)
uiPaddingParent.PaddingLeft = UDim.new(0, 5)
uiPaddingParent.PaddingRight = UDim.new(0, 5)
uiPaddingParent.PaddingBottom = UDim.new(0, 5)
uiPaddingParent.Parent = parentFrame
for i = 1, #labelArray do
-- Erstelle ein automatisch skaliertes Text-Label aus einer Liste
local childLabel = Instance.new("TextLabel")
childLabel.AutomaticSize = Enum.AutomaticSize.XY
childLabel.Size = UDim2.fromOffset(75, 15)
childLabel.Text = labelArray[i]["text"]
childLabel.Font = labelArray[i]["font"]
childLabel.TextSize = labelArray[i]["size"]
childLabel.TextColor3 = Color3.new(1, 1, 1)
childLabel.Parent = parentFrame
-- Visuelle Ästhetik
local roundedCorner = Instance.new("UICorner")
roundedCorner.Parent = childLabel
local uiPadding = Instance.new("UIPadding")
uiPadding.PaddingTop = UDim.new(0, 5)
uiPadding.PaddingLeft = UDim.new(0, 5)
uiPadding.PaddingRight = UDim.new(0, 5)
uiPadding.PaddingBottom = UDim.new(0, 5)
uiPadding.Parent = childLabel
task.wait(2)
end
BackgroundColor3
Diese Eigenschaft legt die Farbe eines Hintergrunds GuiObject fest (die Füllfarbe).Wenn dein Element Text enthält, wie z. B. ein TextBox , TextButton oder TextLabel , stelle sicher, dass die Farbe deines Hintergrunds der Farbe des Textes kontrastiert.
Eine weitere Eigenschaft, die die visuellen Eigenschaften des Hintergrunds bestimmt, ist GuiObject.BackgroundTransparency ; wenn diese auf 1 gesetzt ist, werden weder der Hintergrund noch die Grenze rendern.
Siehe auch BorderColor3.
Code-Beispiele
This code sample causes a parent Frame to loop through all colors of the rainbow using Color3.fromHSV.
-- Put this code in a LocalScript in a Frame
local frame = script.Parent
while true do
for hue = 0, 255, 4 do
-- HSV = hue, saturation, value
-- If we loop from 0 to 1 repeatedly, we get a rainbow!
frame.BorderColor3 = Color3.fromHSV(hue / 256, 1, 1)
frame.BackgroundColor3 = Color3.fromHSV(hue / 256, 0.5, 0.8)
task.wait()
end
end
BackgroundTransparency
Diese Eigenschaft legt die Transparenz des Hintergrunds und der Grenze GuiObject fest.Es bestimmt jedoch nicht die Transparenz des Textes, wenn die GUI ein TextBox , TextButton oder TextLabel ist; die Texttransparenz wird TextBox.TextTransparency , TextButton.TextTransparency und TextLabel.TextTransparency bestimmt.
Wenn diese Eigenschaft auf 1 festgelegt ist, wird weder der Hintergrund noch die Grenze gerendert und der GUI-Hintergrund wird vollständig transparent.
BorderColor3
Bestimmt die Farbe des GuiObject rechteckigen Rahmens (auch bekannt als Strichfarbe).Dies ist getrennt von der GuiObject.BackgroundColor3 des Objekts.Du wirst die Grenze des Objekts nicht sehen können, wenn seine GuiObject.BorderSizePixel Eigenschaft auf 0 gesetzt ist.
Beachten Sie, dass die UIStroke Komponente erweiterte Randeffekte ermöglicht.
Code-Beispiele
Dieses Codebeispiel verursacht, dass die Grenze eines Eltern-GuiObjekts hervorgehoben wird, wenn der Benutzer seine Maus über das Element bewegt.
-- Stelle mich in ein GuiObject, vorzugsweise ein Bild按钮/Text按钮
local button = script.Parent
local function onEnter()
button.BorderSizePixel = 2
button.BorderColor3 = Color3.new(1, 1, 0) -- Gelb
end
local function onLeave()
button.BorderSizePixel = 1
button.BorderColor3 = Color3.new(0, 0, 0) -- Schwarz
end
-- Verbinden von Ereignissen
button.MouseEnter:Connect(onEnter)
button.MouseLeave:Connect(onLeave)
-- Unser Standardzustand ist "nicht hovered"
onLeave()
BorderMode
Diese Eigenschaft legt fest, auf welche Weise die GuiObject Grenze in Bezug auf ihre Dimensionen mit der Enum desselben Namens angeordnet wird, Enum.BorderMode .
Beachten Sie, dass UIStroke diese Eigenschaft überschreiben kann und mehr fortgeschrittene Randeffekte ermöglicht.
BorderSizePixel
Diese Eigenschaft legt fest, wie breit die GuiObject-Grenze gerendert wird, in Pixeln. Die Einstellung auf 0 deaktiviert die Grenze vollständig.
Beachten Sie, dass UIStroke diese Eigenschaft überschreiben kann und mehr fortgeschrittene Randeffekte ermöglicht.
Code-Beispiele
Dieses Codebeispiel verursacht, dass die Grenze eines Eltern-GuiObjekts hervorgehoben wird, wenn der Benutzer seine Maus über das Element bewegt.
-- Stelle mich in ein GuiObject, vorzugsweise ein Bild按钮/Text按钮
local button = script.Parent
local function onEnter()
button.BorderSizePixel = 2
button.BorderColor3 = Color3.new(1, 1, 0) -- Gelb
end
local function onLeave()
button.BorderSizePixel = 1
button.BorderColor3 = Color3.new(0, 0, 0) -- Schwarz
end
-- Verbinden von Ereignissen
button.MouseEnter:Connect(onEnter)
button.MouseLeave:Connect(onLeave)
-- Unser Standardzustand ist "nicht hovered"
onLeave()
ClipsDescendants
Diese Eigenschaft bestimmt, ob die GuiObject einen Teil der abstehenden GUI-Elemente schneiden (unsichtbar machen) wird, die sich sonst außerhalb der Grenzen des Rechtecks befinden würden.
Beachten Sie, dass Rotation nicht von dieser Eigenschaftenunterstützt wird.Wenn diese oder eine Vorgänger-GUI eine Nicht-Null hat, wird diese Eigenschaft ignoriert, und abstehende GUI-Elemente werden unabhängig vom Wert dieser Eigenschaftengerendert.
GuiState
Wenn der Finger des Spieler:inauf der GuiObject getippt und gehalten wird, wird der GuiState des GuiObject auf Press gesetzt.Ebenso, wenn der Finger des Spieler:inaus der GuiObject freigelassen wird, wird der GuiState des GuiObject auf Idle gesetzt, und wenn Interactable auf dem GuiObject deaktiviert wird, wird der Class.GuiState des GuiObject auf NonInteractable gesetzt.
Interactable
Bestimmt, ob die GuiButton mit dem Interagieren kann oder nicht, oder ob sich die GuiState des GuiObject ändert oder nicht.
Auf einer GuiButton :
- Wenn die Einstellung auf der Seite auf gesetzt wird, kann die Taste nicht mehr gedrückt oder angeklickt werden, und die Seite wird ständig auf festgelegt.
- Wenn die Interactable Einstellung auf der GuiButton auf true gesetzt wird, verhält sich die GuiButton wieder normal und die GuiState verhält sich normal.
Auf einer GuiObject :
- Wenn die Interactable Einstellung auf der GuiButton auf false gesetzt ist, wird die GuiState ständig auf NonInteractable gesetzt.
- Wenn die Interactable Einstellung auf der GuiButton auf true gesetzt wird, verhält sich die GuiState wieder normal.
LayoutOrder
Diese Eigenschaft steuert die Sortierreihenfolge des GuiObject bei Verwendung eines UIGridStyleLayout (z. B. UIListLayout oder UIPageLayout ) mit SortOrder auf Enum.SortOrder.LayoutOrder festgelegt.Es hat keine Funktionalität, wenn das Objekt keine Geschwister-UI-Layoutstruktur hat.
GuiObjects werden in aufsteigender Reihenfolge sortiert, bei denen niedrigere Werte vor höheren Werten haben.Objekte mit gleichen Werten fallen in die Reihenfolge zurück, in der sie hinzugefügt wurden.
Wenn du dir nicht sicher bist, ob du in Zukunft ein Element zwischen zwei bestehenden Elementen hinzufügen musst, ist es eine gute Praxis, Multiplikatoren von 100 (0 , 100 , 200 , etc.) zu verwenden).Dies gewährleistet eine große Lücke der Layout-Reihenfolgenwerte, die du für Elemente verwenden kannst, die zwischen anderen Elementen bestellt wurden.
Siehe auch ZIndex, das die Reihenfolge der Renderung des Objekts bestimmt, anstatt die Sortierreihenfolge.
NextSelectionDown
Diese Eigenschaft legt das GuiObject fest, das ausgewählt wird, wenn der Benutzer den Gamepad Selector nach unten verschiebt.Wenn diese Eigenschaft leer ist, ändert das Bewegen des Gamepads nach unten nicht die ausgewählte grafische Benutzeroberfläche.
Das Verschieben des Gamepad-Auswahlers nach unten setzt den GuiService.SelectedObject auf dieses Objekt, es sei denn, die GUI ist nicht Selectable .Beachten Sie, dass diese Eigenschaft auf ein GUI-Element festgelegt werden kann, auch wenn es nicht Selectable ist, daher sollten Sie sicherstellen, dass der Wert einer grafische BenutzeroberflächeEigenschaft Ihrem erwarteten Verhalten entspricht.
Siehe auch NextSelectionUp , NextSelectionLeft und NextSelectionRight .
Code-Beispiele
Dieses Beispiel zeigt, wie man Gamepad-Navigation durch ein Gitter von GuiObject|GUI Elementen aktivieren kann, ohne die GuiObject.NextSelectionUp , GuiObject.NextSelectionDown und GuiObject|NextSelectionRight Eigenschaften für jedes Element im Gitter manuell zu verbinden, und GuiObject.NextSelectionLeft .
Beachten Sie, dass diese Code-Probe davon ausgeht, dass Ihre in alphabetischer Reihenfolge sortiert wird, wo Elemente in alphabetischer Reihenfolge benannt werden.
Der Code vertraut darauf, um die Eigenschaften der nächsten Auswahl für alle GuiObjects auf derselben Ebene wie das UIGridLayout festzulegen.In unserem Beispiel sind das UIGridLayoutObject und die GUI-Elemente innerhalb des Grids alle Kinder eines Frame genannten "Container".Der Code gets the children von "Container" und durchläuft jedes Kind.Kinder, die keine GuiObjects sind, werden ignoriert.Für jedes GUI-Element versucht der Code, die Eigenschaften der nächsten Auswahl zuzuweisen, indem er die folgende Logik verwendet:
- Beginnend mit 1, der Name aller GUI-Elemente passt sich ihrer Position auf dem Grid an
- Links: Das Element auf der linken Seite wird immer 1 weniger numeriert als das aktuelle Element
- Rechts: Das Element auf der linken Seite wird immer 1 mehr numeriert als das aktuelle Element
- Oben: Das Element oben (oben) wird immer die Anzahl von GUIs in einer Reihe 1 weniger als das aktuelle Element sein
- Unten: Das Element unten (nach unten) wird immer die Anzahl der GUIs in einer Reihe mehr als das aktuelle Element sein. Diese Logik erlaubt auch, dass die GUI-Elemente am Anfang und am Ende der Zeilen (außer dem ersten und letzten Element) sich um die nächsten und vorherigen Zeilen wickeln.Wenn ein Element nicht nach links, rechts, oben oder unten existiert, bleibt die nächste Auswahl null und der Verschiebungsbereich des Gamepad-Auswahlers in die Richtung ändert nicht die ausgewählte GUI.
Dieses Beispiel enthält auch Code, um das Netz mit den Pfeiltasten (Oben, Unten, Links, Rechts) deiner Tastatur anstelle eines Gamepads zu testen, nur im Fall, dass du kein Gamepad zum Testen hast.Dieser Teil des Codes wählt zunächst das Element mit dem Namen "1" aus, indem er es der GuiService.SelectedObject Eigenschaft zuweist.
-- Stelle das Gamepad-Auswahlfeld mit dem Code unten ein
local container = script.Parent:FindFirstChild("Container")
local grid = container:GetChildren()
local rowSize = container:FindFirstChild("UIGridLayout").FillDirectionMaxCells
for _, gui in pairs(grid) do
if gui:IsA("GuiObject") then
local pos = gui.Name
-- Linker Rand
gui.NextSelectionLeft = container:FindFirstChild(pos - 1)
-- Rechte Seite
gui.NextSelectionRight = container:FindFirstChild(pos + 1)
-- Oben
gui.NextSelectionUp = container:FindFirstChild(pos - rowSize)
-- Unterhalb
gui.NextSelectionDown = container:FindFirstChild(pos + rowSize)
end
end
-- Teste das Auswahlfeld für Gamepads mit dem Code unten
local GuiService = game:GetService("GuiService")
local UserInputService = game:GetService("UserInputService")
GuiService.SelectedObject = container:FindFirstChild("1")
function updateSelection(input)
if input.UserInputType == Enum.UserInputType.Keyboard then
local key = input.KeyCode
local selectedObject = GuiService.SelectedObject
if not selectedObject then
return
end
if key == Enum.KeyCode.Up then
if not selectedObject.NextSelectionUp then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Down then
if not selectedObject.NextSelectionDown then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Left then
if not selectedObject.NextSelectionLeft then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Right then
if not selectedObject.NextSelectionRight then
GuiService.SelectedObject = selectedObject
end
end
end
end
UserInputService.InputBegan:Connect(updateSelection)
NextSelectionLeft
Diese Eigenschaft legt die GuiObject fest, die beim Verschieben des Gamepad-Auswahlknopfes auf die linke Seite ausgewählt wird.Wenn diese Eigenschaft leer ist, ändert das Verschieben des Gamepads nach links die ausgewählte grafische Benutzeroberflächenicht.
Das Verschieben des Gamepad-Auswahlers nach links setzt den GuiService.SelectedObject auf dieses Objekt, es sei denn, die GUI ist nicht Selectable .Beachten Sie, dass diese Eigenschaft auf ein GUI-Element festgelegt werden kann, auch wenn es nicht Selectable ist, daher sollten Sie sicherstellen, dass der Wert einer grafische BenutzeroberflächeEigenschaft Ihrem erwarteten Verhalten entspricht.
Siehe auch NextSelectionUp , NextSelectionDown und NextSelectionRight .
Code-Beispiele
Dieses Beispiel zeigt, wie man Gamepad-Navigation durch ein Gitter von GuiObject|GUI Elementen aktivieren kann, ohne die GuiObject.NextSelectionUp , GuiObject.NextSelectionDown und GuiObject|NextSelectionRight Eigenschaften für jedes Element im Gitter manuell zu verbinden, und GuiObject.NextSelectionLeft .
Beachten Sie, dass diese Code-Probe davon ausgeht, dass Ihre in alphabetischer Reihenfolge sortiert wird, wo Elemente in alphabetischer Reihenfolge benannt werden.
Der Code vertraut darauf, um die Eigenschaften der nächsten Auswahl für alle GuiObjects auf derselben Ebene wie das UIGridLayout festzulegen.In unserem Beispiel sind das UIGridLayoutObject und die GUI-Elemente innerhalb des Grids alle Kinder eines Frame genannten "Container".Der Code gets the children von "Container" und durchläuft jedes Kind.Kinder, die keine GuiObjects sind, werden ignoriert.Für jedes GUI-Element versucht der Code, die Eigenschaften der nächsten Auswahl zuzuweisen, indem er die folgende Logik verwendet:
- Beginnend mit 1, der Name aller GUI-Elemente passt sich ihrer Position auf dem Grid an
- Links: Das Element auf der linken Seite wird immer 1 weniger numeriert als das aktuelle Element
- Rechts: Das Element auf der linken Seite wird immer 1 mehr numeriert als das aktuelle Element
- Oben: Das Element oben (oben) wird immer die Anzahl von GUIs in einer Reihe 1 weniger als das aktuelle Element sein
- Unten: Das Element unten (nach unten) wird immer die Anzahl der GUIs in einer Reihe mehr als das aktuelle Element sein. Diese Logik erlaubt auch, dass die GUI-Elemente am Anfang und am Ende der Zeilen (außer dem ersten und letzten Element) sich um die nächsten und vorherigen Zeilen wickeln.Wenn ein Element nicht nach links, rechts, oben oder unten existiert, bleibt die nächste Auswahl null und der Verschiebungsbereich des Gamepad-Auswahlers in die Richtung ändert nicht die ausgewählte GUI.
Dieses Beispiel enthält auch Code, um das Netz mit den Pfeiltasten (Oben, Unten, Links, Rechts) deiner Tastatur anstelle eines Gamepads zu testen, nur im Fall, dass du kein Gamepad zum Testen hast.Dieser Teil des Codes wählt zunächst das Element mit dem Namen "1" aus, indem er es der GuiService.SelectedObject Eigenschaft zuweist.
-- Stelle das Gamepad-Auswahlfeld mit dem Code unten ein
local container = script.Parent:FindFirstChild("Container")
local grid = container:GetChildren()
local rowSize = container:FindFirstChild("UIGridLayout").FillDirectionMaxCells
for _, gui in pairs(grid) do
if gui:IsA("GuiObject") then
local pos = gui.Name
-- Linker Rand
gui.NextSelectionLeft = container:FindFirstChild(pos - 1)
-- Rechte Seite
gui.NextSelectionRight = container:FindFirstChild(pos + 1)
-- Oben
gui.NextSelectionUp = container:FindFirstChild(pos - rowSize)
-- Unterhalb
gui.NextSelectionDown = container:FindFirstChild(pos + rowSize)
end
end
-- Teste das Auswahlfeld für Gamepads mit dem Code unten
local GuiService = game:GetService("GuiService")
local UserInputService = game:GetService("UserInputService")
GuiService.SelectedObject = container:FindFirstChild("1")
function updateSelection(input)
if input.UserInputType == Enum.UserInputType.Keyboard then
local key = input.KeyCode
local selectedObject = GuiService.SelectedObject
if not selectedObject then
return
end
if key == Enum.KeyCode.Up then
if not selectedObject.NextSelectionUp then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Down then
if not selectedObject.NextSelectionDown then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Left then
if not selectedObject.NextSelectionLeft then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Right then
if not selectedObject.NextSelectionRight then
GuiService.SelectedObject = selectedObject
end
end
end
end
UserInputService.InputBegan:Connect(updateSelection)
NextSelectionRight
Diese Eigenschaft legt die GuiObject fest, die beim Verschieben des Gamepad-Auswahlknopfes zum Rechten ausgewählt wird.Wenn diese Eigenschaft leer ist, ändert das Verschieben des Gamepads nach rechts die ausgewählte grafische Benutzeroberflächenicht.
Das Verschieben des Gamepad-Auswahlers auf die rechte Seite legt den GuiService.SelectedObject auf dieses Objekt fest, es sei denn, die GUI ist nicht Selectable .Beachten Sie, dass diese Eigenschaft auf ein GUI-Element festgelegt werden kann, auch wenn es nicht Selectable ist, daher sollten Sie sicherstellen, dass der Wert einer grafische BenutzeroberflächeEigenschaft Ihrem erwarteten Verhalten entspricht.
Siehe auch NextSelectionUp , NextSelectionDown und NextSelectionLeft .
Code-Beispiele
Dieses Beispiel zeigt, wie man Gamepad-Navigation durch ein Gitter von GuiObject|GUI Elementen aktivieren kann, ohne die GuiObject.NextSelectionUp , GuiObject.NextSelectionDown und GuiObject|NextSelectionRight Eigenschaften für jedes Element im Gitter manuell zu verbinden, und GuiObject.NextSelectionLeft .
Beachten Sie, dass diese Code-Probe davon ausgeht, dass Ihre in alphabetischer Reihenfolge sortiert wird, wo Elemente in alphabetischer Reihenfolge benannt werden.
Der Code vertraut darauf, um die Eigenschaften der nächsten Auswahl für alle GuiObjects auf derselben Ebene wie das UIGridLayout festzulegen.In unserem Beispiel sind das UIGridLayoutObject und die GUI-Elemente innerhalb des Grids alle Kinder eines Frame genannten "Container".Der Code gets the children von "Container" und durchläuft jedes Kind.Kinder, die keine GuiObjects sind, werden ignoriert.Für jedes GUI-Element versucht der Code, die Eigenschaften der nächsten Auswahl zuzuweisen, indem er die folgende Logik verwendet:
- Beginnend mit 1, der Name aller GUI-Elemente passt sich ihrer Position auf dem Grid an
- Links: Das Element auf der linken Seite wird immer 1 weniger numeriert als das aktuelle Element
- Rechts: Das Element auf der linken Seite wird immer 1 mehr numeriert als das aktuelle Element
- Oben: Das Element oben (oben) wird immer die Anzahl von GUIs in einer Reihe 1 weniger als das aktuelle Element sein
- Unten: Das Element unten (nach unten) wird immer die Anzahl der GUIs in einer Reihe mehr als das aktuelle Element sein. Diese Logik erlaubt auch, dass die GUI-Elemente am Anfang und am Ende der Zeilen (außer dem ersten und letzten Element) sich um die nächsten und vorherigen Zeilen wickeln.Wenn ein Element nicht nach links, rechts, oben oder unten existiert, bleibt die nächste Auswahl null und der Verschiebungsbereich des Gamepad-Auswahlers in die Richtung ändert nicht die ausgewählte GUI.
Dieses Beispiel enthält auch Code, um das Netz mit den Pfeiltasten (Oben, Unten, Links, Rechts) deiner Tastatur anstelle eines Gamepads zu testen, nur im Fall, dass du kein Gamepad zum Testen hast.Dieser Teil des Codes wählt zunächst das Element mit dem Namen "1" aus, indem er es der GuiService.SelectedObject Eigenschaft zuweist.
-- Stelle das Gamepad-Auswahlfeld mit dem Code unten ein
local container = script.Parent:FindFirstChild("Container")
local grid = container:GetChildren()
local rowSize = container:FindFirstChild("UIGridLayout").FillDirectionMaxCells
for _, gui in pairs(grid) do
if gui:IsA("GuiObject") then
local pos = gui.Name
-- Linker Rand
gui.NextSelectionLeft = container:FindFirstChild(pos - 1)
-- Rechte Seite
gui.NextSelectionRight = container:FindFirstChild(pos + 1)
-- Oben
gui.NextSelectionUp = container:FindFirstChild(pos - rowSize)
-- Unterhalb
gui.NextSelectionDown = container:FindFirstChild(pos + rowSize)
end
end
-- Teste das Auswahlfeld für Gamepads mit dem Code unten
local GuiService = game:GetService("GuiService")
local UserInputService = game:GetService("UserInputService")
GuiService.SelectedObject = container:FindFirstChild("1")
function updateSelection(input)
if input.UserInputType == Enum.UserInputType.Keyboard then
local key = input.KeyCode
local selectedObject = GuiService.SelectedObject
if not selectedObject then
return
end
if key == Enum.KeyCode.Up then
if not selectedObject.NextSelectionUp then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Down then
if not selectedObject.NextSelectionDown then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Left then
if not selectedObject.NextSelectionLeft then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Right then
if not selectedObject.NextSelectionRight then
GuiService.SelectedObject = selectedObject
end
end
end
end
UserInputService.InputBegan:Connect(updateSelection)
NextSelectionUp
Diese Eigenschaft legt das GuiObject fest, das ausgewählt wird, wenn der Benutzer den Gamepad Selector nach oben verschiebt.Wenn diese Eigenschaft leer ist, ändert das Bewegen des Gamepads nach oben nicht die ausgewählte grafische Benutzeroberfläche.
Das Verschieben des Gamepad-Auswahlers nach oben setzt die GuiService.SelectedObject an dieses Objekt, es sei denn, die GUI ist nicht Selectable .Beachten Sie, dass diese Eigenschaft auf ein GUI-Element festgelegt werden kann, auch wenn es nicht Selectable ist, daher sollten Sie sicherstellen, dass der Wert einer grafische BenutzeroberflächeEigenschaft Ihrem erwarteten Verhalten entspricht.
Siehe auch NextSelectionDown , NextSelectionLeft , NextSelectionRight .
Code-Beispiele
Dieses Beispiel zeigt, wie man Gamepad-Navigation durch ein Gitter von GuiObject|GUI Elementen aktivieren kann, ohne die GuiObject.NextSelectionUp , GuiObject.NextSelectionDown und GuiObject|NextSelectionRight Eigenschaften für jedes Element im Gitter manuell zu verbinden, und GuiObject.NextSelectionLeft .
Beachten Sie, dass diese Code-Probe davon ausgeht, dass Ihre in alphabetischer Reihenfolge sortiert wird, wo Elemente in alphabetischer Reihenfolge benannt werden.
Der Code vertraut darauf, um die Eigenschaften der nächsten Auswahl für alle GuiObjects auf derselben Ebene wie das UIGridLayout festzulegen.In unserem Beispiel sind das UIGridLayoutObject und die GUI-Elemente innerhalb des Grids alle Kinder eines Frame genannten "Container".Der Code gets the children von "Container" und durchläuft jedes Kind.Kinder, die keine GuiObjects sind, werden ignoriert.Für jedes GUI-Element versucht der Code, die Eigenschaften der nächsten Auswahl zuzuweisen, indem er die folgende Logik verwendet:
- Beginnend mit 1, der Name aller GUI-Elemente passt sich ihrer Position auf dem Grid an
- Links: Das Element auf der linken Seite wird immer 1 weniger numeriert als das aktuelle Element
- Rechts: Das Element auf der linken Seite wird immer 1 mehr numeriert als das aktuelle Element
- Oben: Das Element oben (oben) wird immer die Anzahl von GUIs in einer Reihe 1 weniger als das aktuelle Element sein
- Unten: Das Element unten (nach unten) wird immer die Anzahl der GUIs in einer Reihe mehr als das aktuelle Element sein. Diese Logik erlaubt auch, dass die GUI-Elemente am Anfang und am Ende der Zeilen (außer dem ersten und letzten Element) sich um die nächsten und vorherigen Zeilen wickeln.Wenn ein Element nicht nach links, rechts, oben oder unten existiert, bleibt die nächste Auswahl null und der Verschiebungsbereich des Gamepad-Auswahlers in die Richtung ändert nicht die ausgewählte GUI.
Dieses Beispiel enthält auch Code, um das Netz mit den Pfeiltasten (Oben, Unten, Links, Rechts) deiner Tastatur anstelle eines Gamepads zu testen, nur im Fall, dass du kein Gamepad zum Testen hast.Dieser Teil des Codes wählt zunächst das Element mit dem Namen "1" aus, indem er es der GuiService.SelectedObject Eigenschaft zuweist.
-- Stelle das Gamepad-Auswahlfeld mit dem Code unten ein
local container = script.Parent:FindFirstChild("Container")
local grid = container:GetChildren()
local rowSize = container:FindFirstChild("UIGridLayout").FillDirectionMaxCells
for _, gui in pairs(grid) do
if gui:IsA("GuiObject") then
local pos = gui.Name
-- Linker Rand
gui.NextSelectionLeft = container:FindFirstChild(pos - 1)
-- Rechte Seite
gui.NextSelectionRight = container:FindFirstChild(pos + 1)
-- Oben
gui.NextSelectionUp = container:FindFirstChild(pos - rowSize)
-- Unterhalb
gui.NextSelectionDown = container:FindFirstChild(pos + rowSize)
end
end
-- Teste das Auswahlfeld für Gamepads mit dem Code unten
local GuiService = game:GetService("GuiService")
local UserInputService = game:GetService("UserInputService")
GuiService.SelectedObject = container:FindFirstChild("1")
function updateSelection(input)
if input.UserInputType == Enum.UserInputType.Keyboard then
local key = input.KeyCode
local selectedObject = GuiService.SelectedObject
if not selectedObject then
return
end
if key == Enum.KeyCode.Up then
if not selectedObject.NextSelectionUp then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Down then
if not selectedObject.NextSelectionDown then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Left then
if not selectedObject.NextSelectionLeft then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Right then
if not selectedObject.NextSelectionRight then
GuiService.SelectedObject = selectedObject
end
end
end
end
UserInputService.InputBegan:Connect(updateSelection)
Position
Diese Eigenschaft legt die GuiObject Pixel- und Skalarposition mit einem UDim2 fest. Die Position wird um den Bereich des Objekts GuiObject.AnchorPoint herum zentriert.
Die skalare Position ist relativ zur Größe des zugeordneten GUI-Elements, falls es welche gibt.
Die Pixelfragmente des UDim2 Wertes sind unabhängig von der Größe der zugeordneten grafische Benutzeroberflächegleich.Die Werte stellen die Position des Objekts in Pixeln dar.Die tatsächliche Pixelposition eines Objekts kann aus der GuiBase2d.AbsolutePosition Eigenschaftengelesen werden.
Rotation
Diese Eigenschaft legt die Anzahl der Grad fest, um die GuiObject gedreht wird.Die Rotation ist relativ zum Zentrum des Objekts, nicht dem Punkt der Rotation>, d. h. du kannst den Rotierungspunkt nicht ändern.Zusätzlich ist diese Eigenschaft nicht kompatibel mit ClipsDescendants .
Selectable
Diese Eigenschaft bestimmt, ob die GuiObject beim Navigieren von GUIs mit einem Gamepad ausgewählt werden kann.
Wenn diese Eigenschaft true ist, kann eine GUI ausgewählt werden. Das Auswählen einer GUI setzt auch die Eigenschaft GuiService.SelectedObject auf dieses Objekt.
Wenn dies false ist, kann die GUI nicht ausgewählt werden.Wenn jedoch diese Einstellung auf false gesetzt wird, wenn eine GUI ausgewählt wird, wird sie nicht abgewählt und der Wert der GuiService.SelectedObject Eigenschaftenwird nicht geändert.
Füge GuiObject.SelectionGained und GuiObject.SelectionLost hinzu, wird nicht für das Element feuern. Um ein GuiObject zu deaktivieren, musst du die GuiService.SelectedObject Eigenschaftenändern.
Diese Eigenschaft ist nützlich, wenn eine GUI über Eigenschaften wie diese GuiObject.NextSelectionUp, GuiObject.NextSelectionDown, NextSelectionRight oder NextSelectionLeft mit mehreren GUIs verbunden ist.Anstatt alle Eigenschaften zu ändern, so dass das Gamepad die grafische Benutzeroberflächenicht auswählen kann, kannst du seine auswählbare Eigenschaft deaktivieren, um sie vorübergehend nicht auszuwählen.Dann, wenn du möchtest, dass der Gamepad-Auswahlbereich die grafische Benutzeroberflächeauswählen kann, aktiviere einfach seine auswählbare Eigenschaft erneut.
Code-Beispiele
The example below offers a simple demonstration on how to use the GuiObject.Selectable property to limit when a GUI element can be selected by the Gamepad navigator.
When a TextBox has gains focus, it can be selected. However, when a TextBox loses focus it can no longer be selected.
Although this is a simple demonstration, the property can also be used to prevent the navigator from selecting UI elements that exist for cosmetic rather than functional purposes. For instance, while the buttons on a menu screen should be selectable, the title image should not be.
local GuiService = game:GetService("GuiService")
local textBox = script.Parent
local function gainFocus()
textBox.Selectable = true
GuiService.SelectedObject = textBox
end
local function loseFocus(_enterPressed, _inputObject)
GuiService.SelectedObject = nil
textBox.Selectable = false
end
-- The FocusLost and FocusGained event will fire because the textBox
-- is of type TextBox
textBox.Focused:Connect(gainFocus)
textBox.FocusLost:Connect(loseFocus)
SelectionImageObject
Diese Eigenschaft überschreibt die Standardauswahlverzierung, die für Gamepads verwendet wird.
Beachten Sie, dass die gewählte SelectionImageObject Überschneidung die ausgewählte GuiObject mit dem Size des Bildes überdeckt.Für beste Ergebnisse solltest du die benutzerdefinierte SelectionImageObject über die Skalierungs-UDim2 Werte verkleinern, um sicherzustellen, dass das Objekt richtig über das ausgewählte Element skaliert wird.
Die Änderung des SelectionImageObject für ein GuiObject Element wirkt sich nur auf dieses Element aus. Um alle GUI-Elemente eines Benutzers zu beeinflussen, setze die PlayerGui.SelectionImageObject Eigenschaften.
Um zu bestimmen oder festzulegen, welches GUI-Element vom Benutzer ausgewählt wird, kannst du die EigenschaftenGuiService.SelectedObject verwenden.Der Spieler verwendet das Gamepad, um verschiedene GUI-Elemente auszuwählen, indem er die NextSelectionUp, NextSelectionDown, NextSelectionLeft und NextSelectionRight Ereignisse auslöst.
SelectionOrder
GuiObjekte mit einer niedrigeren Auswahlordnung werden früher ausgewählt als GuiObjekte mit einer höheren Auswahlordnung, wenn du das Gamepad-Auswahl startest oder GuiService:Select() auf einen Vorgängeraufrufst.Diese Eigenschaft hat keine Auswirkungen auf die richtungsbezogene Navigation.Der Standardwert ist 0.
Size
Diese Eigenschaft legt die GuiObject skalare und Pixelgröße mit einem UDim2 fest.
Die skalare Größe ist relativ zur Größe des zugeordneten GUI-Elements, falls es welche gibt.
Die Pixelfragmente des UDim2 Wertes sind unabhängig von der Größe der zugeordneten grafische Benutzeroberflächegleich.Die Werte stehen für die Größe des Objekts in Pixeln.Die tatsächliche Pixelfarbe eines Objekts kann aus der EigenschaftenGuiBase2d.AbsoluteSize gelesen werden.
Wenn das GuiObject einen übergeordnetes Teilhat, beeinflusst die Größe entlang jeder Achse auch die des übergeordnetes TeilSizeConstraint.
Code-Beispiele
This code sample allows you to create a simple color-changing health bar using two nested Frames. Paste this into a LocalScript on the inner frame.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
-- Paste script into a LocalScript that is
-- parented to a Frame within a Frame
local frame = script.Parent
local container = frame.Parent
container.BackgroundColor3 = Color3.new(0, 0, 0) -- black
-- This function is called when the humanoid's health changes
local function onHealthChanged()
local human = player.Character.Humanoid
local percent = human.Health / human.MaxHealth
-- Change the size of the inner bar
frame.Size = UDim2.new(percent, 0, 1, 0)
-- Change the color of the health bar
if percent < 0.1 then
frame.BackgroundColor3 = Color3.new(1, 0, 0) -- black
elseif percent < 0.4 then
frame.BackgroundColor3 = Color3.new(1, 1, 0) -- yellow
else
frame.BackgroundColor3 = Color3.new(0, 1, 0) -- green
end
end
-- This function runs is called the player spawns in
local function onCharacterAdded(character)
local human = character:WaitForChild("Humanoid")
-- Pattern: update once now, then any time the health changes
human.HealthChanged:Connect(onHealthChanged)
onHealthChanged()
end
-- Connect our spawn listener; call it if already spawned
player.CharacterAdded:Connect(onCharacterAdded)
if player.Character then
onCharacterAdded(player.Character)
end
SizeConstraint
Diese Eigenschaft legt die Size-Achsen fest, auf denen die GuiObject basieren wird, im Verhältnis zur Größe ihres übergeordnetes Teil.
Diese Eigenschaft ist nützlich für die Erstellung von GUI-Objekten, die mit der Breite oder der Höhe eines Elternobjekts skalieren sollen, aber nicht beide, wodurch die Aspektverhältnis des Objekts effektiv erhalten bleibt.
Visible
Diese Eigenschaft, ob die GuiObject und ihre Nachkommen gerendert werden.
Die Rendering von einzelnen Komponenten eines GuiObject kann einzeln durch Transparenz-Eigenschaften wie GuiObject.BackgroundTransparency , TextLabel.TextTransparency und ImageLabel.ImageTransparency gesteuert werden.
Wenn diese Eigenschaft false ist, wird die GuiObject von Layoutstrukturen wie UIListLayout , UIGridLayout und UITableLayout ignoriert.Mit anderen Worten, der Raum, den das Element sonst im Layout einnehmen würde, wird stattdessen von anderen Elementen verwendet.
Code-Beispiele
Dieses Codebeispiel fügt der Windows-UI eine Öffnungs-/Schließfunktionalität hinzu.Füge als lokales Skript ein, das ein Geschwisterteil eines Rahmens namens Fenster, einen Text-/Bildknopf namens Fenster und einen Text-/Bildknopf innerhalb des Rahmens namens Schließen ist.
local gui = script.Parent
local window = gui:WaitForChild("Window")
local toggleButton = gui:WaitForChild("ToggleWindow")
local closeButton = window:WaitForChild("Close")
local function toggleWindowVisbility()
-- Flip ein boolesches mit dem Schlüsselwort `not`
window.Visible = not window.Visible
end
toggleButton.Activated:Connect(toggleWindowVisbility)
closeButton.Activated:Connect(toggleWindowVisbility)
ZIndex
Diese Eigenschaft legt die Reihenfolge fest, in der ein GuiObject in Bezug auf andere gerendert wird.
Standardmäßig wird render in aufsteigender Prioritätsordnung ausgeführt, wo diejenigen mit niedrigeren Werten unter denen mit höheren Werten gerendert werden.Du kannst die Render顺序 innerhalb von ScreenGui, SurfaceGui oder BillboardGui ändern, indem du den Wert seiner ZIndexBehavior änderst.
Wenn du dir nicht sicher bist, ob du in Zukunft ein Element zwischen zwei bestehenden Elementen hinzufügen musst, ist es eine gute Praxis, Multiplikatoren von 100 (0 , 100 , 200 , etc.) zu verwenden).Dies gewährleistet eine große Lücke der Render-Reihenfolgenwerte, die du für Elemente verwenden kannst, die zwischen anderen Elementen angeordnet sind.
Siehe auch LayoutOrder, das die Reihenfolge der Sortierung eines GuiObject bei Verwendung mit einer Layoutstruktur wie UIListLayout oder UIGridLayout steuert.
Methoden
TweenPosition
Bewegt eine GUI reibungslos in eine neue Position in der angegebenen Zeit mit der angegebenen und > .
Diese Funktion gibt zurück, ob der Teenager spielen wird.Es wird nicht abgespielt, wenn ein anderer Teenager auf der GuiObject agiert und der Überschreibungsparameter false ist.
Siehe auch GuiObject:TweenSize() und GuiObject:TweenSizeAndPosition().
Parameter
Wo sich die GUI hinbewegen soll.
Die Richtung, in der die GUI auf die Endposition erleichtert werden soll.
Der Stil, in dem die GUI auf die Endposition leichter gemacht wird.
Wie lange, in Sekunden, der Teenager zum Abschluss brauchen sollte.
Ob der Teenager einen im Gange befindlichen Tweenüberschreiben wird.
Eine Rückruffunktion, die ausgeführt wird, wenn der Teenager abgeschlossen ist.
Rückgaben
Ob der Teenager spielen wird.
Code-Beispiele
This code sample demonstrates a more involved usage of TweenPosition by detecting when the tween completes/cancels by defining a callback function. It also prints whether the tween will play.
local START_POSITION = UDim2.new(0, 0, 0, 0)
local GOAL_POSITION = UDim2.new(1, 0, 1, 0)
local guiObject = script.Parent
local function callback(state)
if state == Enum.TweenStatus.Completed then
print("The tween completed uninterrupted")
elseif state == Enum.TweenStatus.Canceled then
print("Another tween cancelled this one")
end
end
-- Initialize the GuiObject position, then start the tween:
guiObject.Position = START_POSITION
local willPlay = guiObject:TweenPosition(
GOAL_POSITION, -- Final position the tween should reach
Enum.EasingDirection.In, -- Direction of the easing
Enum.EasingStyle.Sine, -- Kind of easing to apply
2, -- Duration of the tween in seconds
true, -- Whether in-progress tweens are interrupted
callback -- Function to be callled when on completion/cancelation
)
if willPlay then
print("The tween will play")
else
print("The tween will not play")
end
TweenSize
Größe einen GuiObject auf eine neue UDim2 in der angegebenen Zeit mit der angegebenen Enum.EasingDirection und Enum.EasingStyle um.
Diese Funktion gibt zurück, ob der Teenager spielen wird.Normalerweise wird dies immer true zurückgeben, aber es wird false zurückgeben, wenn ein anderer Teenager aktiv ist und die Überschreibung auf false festgelegt ist.
Siehe auch GuiObject:TweenSize() und GuiObject:TweenSizeAndPosition().
Parameter
Die Größe, die die GUI Größe anpassensoll.
Die Richtung, in der die GUI auf die Endgröße reduziert werden soll.
Der Stil, mit dem die Benutzeroberfläche auf die Endgröße reduziert wird.
Wie lange, in Sekunden, der Teenager zum Abschluss brauchen sollte.
Ob der Teenager einen im Gange befindlichen Tweenüberschreiben wird.
Eine Rückruffunktion, die ausgeführt wird, wenn der Teenager abgeschlossen ist.
Rückgaben
Ob der Teenager spielen wird.
Code-Beispiele
This code sample demonstrates the usage of the GuiObject:TweenSize() function. It initiates an animation on the parent's GuiObject.Size property to UDim2.new(0.5, 0, 0.5, 0), which is half the GuiObject's parent size on both axes.
Additionally, it demonstrates how the callback parameter can be used to detect when the tween stops (whether it was cancelled by another tween or completed).
local guiObject = script.Parent
local function callback(didComplete)
if didComplete then
print("The tween completed successfully")
else
print("The tween was cancelled")
end
end
local willTween = guiObject:TweenSize(
UDim2.new(0.5, 0, 0.5, 0), -- endSize (required)
Enum.EasingDirection.In, -- easingDirection (default Out)
Enum.EasingStyle.Sine, -- easingStyle (default Quad)
2, -- time (default: 1)
true, -- should this tween override ones in-progress? (default: false)
callback -- a function to call when the tween completes (default: nil)
)
if willTween then
print("The GuiObject will tween")
else
print("The GuiObject will not tween")
end
TweenSizeAndPosition
Größe und Position einer GUI in der angegebenen Zeit mithilfe der angegebenen und skalieren und verschieben, um sie auf eine neue Größe und Position zu bringen .
Diese Funktion gibt zurück, ob der Teenager spielen wird.Normalerweise wird dies immer true zurückgeben, aber es wird false zurückgeben, wenn ein anderer Teenager aktiv ist und die Überschreibung auf false festgelegt ist.
Siehe auch GuiObject:TweenSize() und GuiObject:TweenSizeAndPosition().
Parameter
Die Größe, die die GUI Größe anpassensoll.
Wo sich die GUI hinbewegen soll.
Die Richtung, in der die GUI auf die Endgröße und Endposition leichter gemacht werden soll.
Der Stil, in dem die GUI auf die Endgröße und Endposition leichter gemacht wird.
Wie lange, in Sekunden, der Teenager zum Abschluss brauchen sollte.
Ob der Teenager einen im Gange befindlichen Tweenüberschreiben wird.
Eine Rückruffunktion, die ausgeführt wird, wenn der Teenager abgeschlossen ist.
Rückgaben
Ob der Teenager spielen wird.
Code-Beispiele
The below example would tween a Frame to the top left of the parent's size and resize it down to 0.
local frame = script.Parent.Frame
frame:TweenSizeAndPosition(UDim2.new(0, 0, 0, 0), UDim2.new(0, 0, 0, 0))
Ereignisse
InputBegan
Dieses Ereignis wird ausgelöst, wenn ein Benutzer beginnt, mit dem GuiObject über ein Mensch-Computer-Schnittstellen-Gerät zu interagieren (Maus-Button unten, Berührung beginnen, Tastatur-Button unten usw.).
Die UserInputService hat ein mit demselben Namen benanntes Ereignis, das sich nicht auf ein bestimmtes UI-Element beschränkt: UserInputService.InputBegan .
Dieses Ereignis wird immer unabhängig vom Spielzustand ausgelöst.
Siehe auch GuiObject.InputEnded und GuiObject.InputChanged.
Parameter
Ein InputObject, das nützliche Daten für die Abfrage von Benutzereingaben wie die type of input, state of input und screen coordinates of the input enthält.
Code-Beispiele
The following example demonstrates one of many usage examples of handling user input from InputBegan depending on its type.
In order for this to work as expected, it must be placed in a LocalScript and a child of gui.
-- In order to use the InputBegan event, you must specify the GuiObject
local gui = script.Parent
-- A sample function providing multiple usage cases for various types of user input
local function inputBegan(input)
if input.UserInputType == Enum.UserInputType.Keyboard then
print("A key is being pushed down! Key:", input.KeyCode)
elseif input.UserInputType == Enum.UserInputType.MouseButton1 then
print("The left mouse button has been pressed down at", input.Position)
elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
print("The right mouse button has been pressed down at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Touch then
print("A touchscreen input has started at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Gamepad1 then
print("A button is being pressed on a gamepad! Button:", input.KeyCode)
end
end
gui.InputBegan:Connect(inputBegan)
InputChanged
Dieses Ereignis wird ausgelöst, wenn ein Benutzer die Art und Weise ändert, wie er über ein Mensch-Computer-Schnittstellen-Gerät interagiert (Maus-Button unten, Berührungsbeginn, Tastatur-Button unten usw.).
Die UserInputService hat ein mit demselben Namen benanntes Ereignis, das sich nicht auf ein bestimmtes UI-Element beschränkt: UserInputService.InputChanged .
Dieses Ereignis wird immer unabhängig vom Spielzustand ausgelöst.
Siehe auch GuiObject.InputBegan und GuiObject.InputEnded.
Parameter
Ein InputObject, das nützliche Daten für die Abfrage von Benutzereingaben wie die type of input, state of input und screen coordinates of the input enthält.
Code-Beispiele
The following example demonstrates one of many usage examples of handling user input from InputChanged depending on its type.
In order for this to work as expected, it must be placed in a LocalScript and a child of gui.
local UserInputService = game:GetService("UserInputService")
local gui = script.Parent
local function printMovement(input)
print("Position:", input.Position)
print("Movement Delta:", input.Delta)
end
local function inputChanged(input)
if input.UserInputType == Enum.UserInputType.MouseMovement then
print("The mouse has been moved!")
printMovement(input)
elseif input.UserInputType == Enum.UserInputType.MouseWheel then
print("The mouse wheel has been scrolled!")
print("Wheel Movement:", input.Position.Z)
elseif input.UserInputType == Enum.UserInputType.Gamepad1 then
if input.KeyCode == Enum.KeyCode.Thumbstick1 then
print("The left thumbstick has been moved!")
printMovement(input)
elseif input.KeyCode == Enum.KeyCode.Thumbstick2 then
print("The right thumbstick has been moved!")
printMovement(input)
elseif input.KeyCode == Enum.KeyCode.ButtonL2 then
print("The pressure being applied to the left trigger has changed!")
print("Pressure:", input.Position.Z)
elseif input.KeyCode == Enum.KeyCode.ButtonR2 then
print("The pressure being applied to the right trigger has changed!")
print("Pressure:", input.Position.Z)
end
elseif input.UserInputType == Enum.UserInputType.Touch then
print("The user's finger is moving on the screen!")
printMovement(input)
elseif input.UserInputType == Enum.UserInputType.Gyro then
local _rotInput, rotCFrame = UserInputService:GetDeviceRotation()
local rotX, rotY, rotZ = rotCFrame:toEulerAnglesXYZ()
local rot = Vector3.new(math.deg(rotX), math.deg(rotY), math.deg(rotZ))
print("The rotation of the user's mobile device has been changed!")
print("Position", rotCFrame.p)
print("Rotation:", rot)
elseif input.UserInputType == Enum.UserInputType.Accelerometer then
print("The acceleration of the user's mobile device has been changed!")
printMovement(input)
end
end
gui.InputChanged:Connect(inputChanged)
InputEnded
Das Ereignis InputEnded wird ausgelöst, wenn ein Benutzer die Interaktion über ein Mensch-Computer-Schnittstellen-Gerät (Mausknopf unten, Berührung beginnen, Tastaturknopf unten usw.) beendet.
Die UserInputService hat ein mit demselben Namen benanntes Ereignis, das sich nicht auf ein bestimmtes UI-Element beschränkt: UserInputService.InputEnded .
Dieses Ereignis wird immer unabhängig vom Spielzustand ausgelöst.
Siehe auch GuiObject.InputBegan und GuiObject.InputChanged.
Parameter
Ein InputObject, das nützliche Daten für die Abfrage von Benutzereingaben wie die Enum.UserInputType, Enum.UserInputState und InputObject.Position enthält.
Code-Beispiele
The following example demonstrates one of many usage examples of handling user input from InputEnded depending on its type.
In order for this to work as expected, it must be placed in a LocalScript and a child of gui.
-- In order to use the InputChanged event, you must specify a GuiObject
local gui = script.Parent
-- A sample function providing multiple usage cases for various types of user input
local function inputEnded(input)
if input.UserInputType == Enum.UserInputType.Keyboard then
print("A key has been released! Key:", input.KeyCode)
elseif input.UserInputType == Enum.UserInputType.MouseButton1 then
print("The left mouse button has been released at", input.Position)
elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
print("The right mouse button has been released at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Touch then
print("A touchscreen input has been released at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Gamepad1 then
print("A button has been released on a gamepad! Button:", input.KeyCode)
end
end
gui.InputEnded:Connect(inputEnded)
MouseEnter
Das Ereignis MouseEnter wird ausgelöst, wenn ein Benutzer seine Maus in ein GuiObject Element bewegt.
Verwende bitte nicht die x- und y-Argumente, die von diesem Ereignis übergeben werden, als einen sicheren Weg, um zu bestimmen, wo sich die Maus des Benutzers befindet, wenn sie eine grafische Benutzeroberflächebetritt.Diese Koordinaten können auch variieren, wenn die Maus über denselben Rand in die GUI eintreibt - insbesondere, wenn die Maus das Element schnell betritt.Dies liegt daran, dass die Koordinaten die Position der Maus anzeigen, wenn das Ereignis ausgelöst wird, anstatt den genauen Moment, in dem die Maus die grafische Benutzeroberflächebetritt.
Dieses Ereignis wird auch ausgelöst, wenn das GUI-Element unter einem anderen Element gerendert wird.
Wenn Sie verfolgen möchten, wann die Maus eines Benutzers ein GUI-Element verlässt, können Sie das Ereignis GuiObject.MouseLeave verwenden.
Siehe auch
Parameter
Die Bildschirmkoordinate der Maus X in Pixeln, bezogen auf die obere linke Ecke des Bildschirms.
Die Bildschirmkoordinate der Maus in Pixeln, bezogen auf den oberen linken Eckbereich des Bildschirms.
Code-Beispiele
The following example prints the mouse location, in pixels, when it enters GUI element.
local guiObject = script.Parent
guiObject.MouseEnter:Connect(function(x, y)
print("The user's mouse cursor has entered the GuiObject at position", x, ",", y)
end)
MouseLeave
Das Ereignis MouseLeave wird ausgelöst, wenn ein Benutzer seine Maus aus einem GuiObject Element heraus bewegt.
Verwende bitte nicht die x- und y-Argumente, die von diesem Ereignis übergeben wurden, als einen sicheren Weg, um zu bestimmen, wo sich die Maus des Benutzers befindet, wenn sie eine grafische Benutzeroberflächeverlässt.Diese Koordinaten können auch variieren, wenn die Maus die GUI über dens gleichen Rand verlässt - insbesondere, wenn die Maus das Element schnell verlässt.Dies liegt daran, dass die Koordinaten die Position der Maus anzeigen, wenn das Ereignis ausgelöst wird, anstatt den genauen Moment, in dem die Maus die grafische Benutzeroberflächeverlässt.
Dieses Ereignis wird auch ausgelöst, wenn das GUI-Element unter einem anderen Element gerendert wird.
Siehe auch
Parameter
Die Bildschirmkoordinate der Maus X in Pixeln, bezogen auf die obere linke Ecke des Bildschirms.
Die Bildschirmkoordinate der Maus in Pixeln, bezogen auf den oberen linken Eckbereich des Bildschirms.
MouseMoved
Feuert immer dann, wenn ein Benutzer seine Maus bewegt, während sie sich innerhalb eines GuiObject Elements befindet.Es ist ähnlich wie Mouse.Move, das unabhängig davon feuert, ob die Maus des Benutzers über einem GUI-Element ist.
Beachten Sie, dass dieses Ereignis ausgelöst wird, wenn die Position der Maus aktualisiert wird, daher wird es wiederholt feuern, während es sich bewegt.
Die x- und y-Argumente zeigen die aktualisierten Bildschirmkoordinaten der Maus des Benutzers in Pixeln an.Diese können nützlich sein, um die Position der Maus auf der grafische Benutzeroberfläche, dem Bildschirm und dem Delta zu bestimmen, seit der vorherigen Position der Maus, wenn sie in einer globalen Variable verfolgt wird.
Der Code unten zeigt, wie man den Vector2 Offset der Maus des Benutzers in Bezug auf ein GUI-Element bestimmt:
local Players = game:GetService("Players")
local CustomScrollingFrame = script.Parent
local SubFrame = CustomScrollingFrame:FindFirstChild("SubFrame")
local mouse = Players.LocalPlayer:GetMouse()
local function getPosition(X, Y)
local gui_X = CustomScrollingFrame.AbsolutePosition.X
local gui_Y = CustomScrollingFrame.AbsolutePosition.Y
local pos = Vector2.new(math.abs(X - gui_X), math.abs(Y - gui_Y - 36))
print(pos)
end
CustomScrollingFrame.MouseMoved:Connect(getPosition)
Beachten Sie, dass dieses Ereignis möglicherweise nicht genau dann ausgelöst wird, wenn die Maus des Benutzers ein GUI-Element betritt oder verlässt.Daher können die Argumente x und y möglicherweise nicht perfekt zu den Koordinaten der Ränder der grafische Benutzeroberflächepassen.
Siehe auch
Parameter
Die Bildschirmkoordinate der Maus X in Pixeln, bezogen auf die obere linke Ecke des Bildschirms.
Die Bildschirmkoordinate der Maus in Pixeln, bezogen auf den oberen linken Eckbereich des Bildschirms.
MouseWheelBackward
Das WheelBackward-Ereignis wird ausgelöst, wenn ein Benutzer sein Mobilrad zurück scrollt, wenn die Maus über einem GuiObject-Element ist.Es ist ähnlich wie Mouse.WheelBackward, das unabhängig davon feuert, ob die Maus des Benutzers über einem GUI-Element ist.
Dieses Ereignis feuert nur als Indikator der rückwärtigen Bewegung des Rades ab.Das bedeutet, dass sich die x und y Mauskoordinatenargumente nicht als Ergebnis dieses Ereignisses ändern.Diese Koordinaten ändern sich nur, wenn die Maus sich bewegt, was durch das Ereignis GuiObject.MouseMoved verfolgt werden kann.
Siehe auch
Parameter
Die Bildschirmkoordinate der Maus X in Pixeln, bezogen auf die obere linke Ecke des Bildschirms.
Die Bildschirmkoordinate der Maus in Pixeln, bezogen auf den oberen linken Eckbereich des Bildschirms.
MouseWheelForward
Das WheelForward-Ereignis wird ausgelöst, wenn ein Benutzer sein Mausrad nach vorne scrollt, wenn die Maus über einem GuiObject-Element ist.Es ist ähnlich wie Mouse.WheelForward, das unabhängig davon feuert, ob die Maus des Benutzers über einem GUI-Element ist.
Dieses Ereignis feuert nur als Indikator der Vorschau der Räderbewegung ab.Das bedeutet, dass sich die X und Y Mauskoordinatenargumente nicht als Ergebnis dieses Ereignisses ändern.Diese Koordinaten ändern sich nur, wenn die Maus sich bewegt, was durch das Ereignis GuiObject.MouseMoved verfolgt werden kann.
Siehe auch
Parameter
Die Bildschirmkoordinate der Maus X in Pixeln, bezogen auf die obere linke Ecke des Bildschirms.
Die Y -Koordinate der Maus des Benutzers.
SelectionGained
Dieses Ereignis wird ausgelöst, wenn der Gamepad-Auswahlstart sich auf die GuiObject konzentriert.
Wenn du von der Gamepad überprüfen möchtest, dass die Fokussierung auf das GUI-Element aufhört, kannst du das Ereignis GuiObject.SelectionLost verwenden.
Wenn eine GUI den Fokus der Auswahl erhält, ändert sich auch der Wert der SelectedObject-Eigenschaft, die den Fokus erhält.Um festzustellen, welche GUI die Auswahl erhalten hat, überprüfe den Wert dieser Eigenschaften.
Code-Beispiele
The following example prints a message when the user selects the object with a gamepad.
In order for this to work as expected, it must be placed in a LocalScript and a child of gui.
local guiObject = script.Parent
local function selectionGained()
print("The user has selected this button with a gamepad.")
end
guiObject.SelectionGained:Connect(selectionGained)
SelectionLost
Dieses Ereignis wird ausgelöst, wenn der Gamepad-Auswahlstoppt sich auf die GuiObject zu konzentrieren.
Wenn du vom Gamepad aus überprüfen möchtest, ob es sich auf das GUI-Element konzentriert, kannst du das Ereignis GuiObject.SelectionGained verwenden.
Wenn eine GUI den Fokus verliert, ändert sich der Wert der SelectionObject-Eigenschaft auf nil oder auf das GUI-Element, das den Fokus erhält.Um zu bestimmen, welche GUI die Auswahl erhalten hat, oder wenn keine GUI ausgewählt wurde, überprüfe den Wert dieser Eigenschaften.
Code-Beispiele
The following example prints a message when the element has its focus lost on a gamepad.
In order for this to work as expected, it must be placed in a LocalScript and a child of gui.
local guiObject = script.Parent
local function selectionLost()
print("The user no longer has this selected with their gamepad.")
end
guiObject.SelectionLost:Connect(selectionLost)
TouchLongPress
Dieses Ereignis wird nach einem kurzen Moment abgefeuert, wenn der Spieler seinen Finger auf das UI-Element mit einem touchaktiven Gerät hält.Es feuert mit einer Tabelle von Vector2, die die relativen Bildschirmpositionen der Finger beschreiben, die an der Geste beteiligt sind.Darüber hinaus feuert es mehrere Male ab: Enum.UserInputState.Begin nach einer kurzen Verzögerung, Enum.UserInputState.Change wenn der Spieler seinen Finger während der Geste bewegt, und schließlich Enum.UserInputState.End .Die Verzögerung ist platformabhängig; in Studio ist es ein bisschen länger als eine Sekunde.
Da dieses Ereignis nur einen Finger erfordert, kann dieses Ereignis im Studio mit dem Emulator und einer Maus simuliert werden.
Parameter
Ein Array von Vector2, das die relativ Positionen der Finger beschreibt, die an der Geste beteiligt sind.
Ein Enum.UserInputState, das den Zustand der Geste beschreibt:
- Fange Brände einmal am Beginn der Geste (nach der kurzen Verzögerung) an
- Ändere das Feuer, wenn der Spieler seinen Finger bewegt, während er gedrückt wird
- Endfeuer einmal am Ende der Geste, wenn sie ihren Finger loslassen.
Code-Beispiele
This code sample allows the player to manipulate the screen position of some UI element, like a Frame, by holding down on the UI element for a brief moment. Then, the player moves their finger and releases. During the gesture the Frame is colored blue with a white outline.
local frame = script.Parent
frame.Active = true
local dragging = false
local basePosition
local startTouchPosition
local borderColor3
local backgroundColor3
local function onTouchLongPress(touchPositions, state)
if state == Enum.UserInputState.Begin and not dragging then
-- Start a drag
dragging = true
basePosition = frame.Position
startTouchPosition = touchPositions[1]
-- Color the frame to indicate the drag is happening
borderColor3 = frame.BorderColor3
backgroundColor3 = frame.BackgroundColor3
frame.BorderColor3 = Color3.new(1, 1, 1) -- White
frame.BackgroundColor3 = Color3.new(0, 0, 1) -- Blue
elseif state == Enum.UserInputState.Change then
local touchPosition = touchPositions[1]
local deltaPosition =
UDim2.new(0, touchPosition.X - startTouchPosition.X, 0, touchPosition.Y - startTouchPosition.Y)
frame.Position = basePosition + deltaPosition
elseif state == Enum.UserInputState.End and dragging then
-- Stop the drag
dragging = false
frame.BorderColor3 = borderColor3
frame.BackgroundColor3 = backgroundColor3
end
end
frame.TouchLongPress:Connect(onTouchLongPress)
TouchPan
Dieses Ereignis wird ausgelöst, wenn der Spieler seinen Finger auf das UI-Element mit einem touchaktiven Gerät bewegt.Es feuert kurz bevor GuiObject.TouchSwipe es tut, und feuert nicht mit GuiObject.TouchTap.Dieses Ereignis ist nützlich, um dem Spieler zu ermöglichen, die Position von UI-Elementen auf dem Bildschirm zu manipulieren.
Dieses Ereignis wird mit einer Tabelle von Vector2, die die relativen Bildschirmpositionen der Finger beschreibt, die an der Geste beteiligt sind, ausgelöst.Darüber hinaus feuert es mehrere Male ab: Enum.UserInputState.Begin nach einer kurzen Verzögerung, Enum.UserInputState.Change wenn der Spieler seinen Finger während der Geste bewegt, und schließlich mit Enum.UserInputState.End.
Dieses Ereignis kann nicht im Studio mit dem Emulator und einer Maus simuliert werden; du musst ein echtes Touch-fähiges Gerät haben, um es abzufeuern.
Parameter
Ein Luau- Array von Vector2 Objekten, die jedes die Position aller Finger anzeigt, die an der Geste beteiligt sind.
Zeigt an, wie weit die Pan-Geste von ihrem Startpunkt entfernt ist.
Zeigt an, wie schnell die Geste in jeder Dimension ausgeführt wird.
Weist auf die Enum.UserInputState der Geste hin.
Code-Beispiele
This code sample is meant to be placed in a LocalScript within an inner Frame that is inside an outer Frame, or other GuiObject. It allows the player to manipulate the position of the inner frame by moving their finger on the outer frame.
local innerFrame = script.Parent
local outerFrame = innerFrame.Parent
outerFrame.BackgroundTransparency = 0.75
outerFrame.Active = true
outerFrame.Size = UDim2.new(1, 0, 1, 0)
outerFrame.Position = UDim2.new(0, 0, 0, 0)
outerFrame.AnchorPoint = Vector2.new(0, 0)
outerFrame.ClipsDescendants = true
local dragging = false
local basePosition
local function onTouchPan(_touchPositions, totalTranslation, _velocity, state)
if state == Enum.UserInputState.Begin and not dragging then
dragging = true
basePosition = innerFrame.Position
outerFrame.BackgroundTransparency = 0.25
elseif state == Enum.UserInputState.Change then
innerFrame.Position = basePosition + UDim2.new(0, totalTranslation.X, 0, totalTranslation.Y)
elseif state == Enum.UserInputState.End and dragging then
dragging = false
outerFrame.BackgroundTransparency = 0.75
end
end
outerFrame.TouchPan:Connect(onTouchPan)
TouchPinch
Dieses Ereignis wird ausgelöst, wenn der Spieler zwei Finger verwendet, um eine Pinch- oder Pull-Geste auf dem UI-Element mit einem touch-aktivierten Gerät auszuführen.Ein Klemmen passiert, wenn zwei oder mehr Finger sich näher kommen, und ein Ziehen passiert, wenn sie sich voneinander entfernen.Dieses Ereignis wird in Verbindung mit GuiObject.TouchPan ausgelöst.Dieses Ereignis ist nützlich, um dem Spieler zu ermöglichen, die Skalierung (Größe) von UI-Elementen auf dem Bildschirm zu manipulieren, und wird meistens für Zoom-Funktionen verwendet.
Dieses Ereignis wird mit einer Tabelle von Vector2, die die relativen Bildschirmpositionen der Finger beschreibt, die an der Geste beteiligt sind, ausgelöst.Darüber hinaus feuert es mehrere Male ab: Enum.UserInputState.Begin nach einer kurzen Verzögerung, Enum.UserInputState.Change wenn der Spieler einen Finger während der Geste bewegt, und schließlich mit Enum.UserInputState.End.Es sollte beachtet werden, dass die Skala multiplikativ verwendet werden sollte .
Da dieses Ereignis mindestens zwei Finger erfordert, ist es nicht möglich, es im Studio mit dem Emulator und einer Maus zu simulieren; du musst ein echtes berührungsbeschaltetes Gerät haben.
Parameter
Ein Luau-Array von Vector2 Objekten, die jedes die Position aller Finger anzeigt, die an der Pinch-Geste beteiligt sind.
Eine Flut, die den Unterschied vom Beginn der Pinziergeste anzeigt.
Eine Flut, die anzeigt, wie schnell die Pinch-Geste passiert.
Weist auf die Enum.UserInputState der Geste hin.
Code-Beispiele
This code sample is meant for a LocalScript within an inner Frame that is inside an outer Frame, or other GuiObject. It allows the player to scale the inner frame by performing a GuiObject.TouchPinch gesture on the outer frame.
local innerFrame = script.Parent
local outerFrame = innerFrame.Parent
outerFrame.BackgroundTransparency = 0.75
outerFrame.Active = true
outerFrame.Size = UDim2.new(1, 0, 1, 0)
outerFrame.Position = UDim2.new(0, 0, 0, 0)
outerFrame.AnchorPoint = Vector2.new(0, 0)
outerFrame.ClipsDescendants = true
local dragging = false
local uiScale = Instance.new("UIScale")
uiScale.Parent = innerFrame
local baseScale
local function onTouchPinch(_touchPositions, scale, _velocity, state)
if state == Enum.UserInputState.Begin and not dragging then
dragging = true
baseScale = uiScale.Scale
outerFrame.BackgroundTransparency = 0.25
elseif state == Enum.UserInputState.Change then
uiScale.Scale = baseScale * scale -- Notice the multiplication here
elseif state == Enum.UserInputState.End and dragging then
dragging = false
outerFrame.BackgroundTransparency = 0.75
end
end
outerFrame.TouchPinch:Connect(onTouchPinch)
TouchRotate
Dieses Ereignis wird ausgelöst, wenn der Spieler zwei Finger verwendet, um eine Pinch- oder Pull-Geste auf dem UI-Element mit einem touch-aktivierten Gerät auszuführen.Die Rotation tritt auf, wenn sich der Winkel der Linie zwischen zwei Fingern ändert.Dieses Ereignis wird in Verbindung mit GuiObject.TouchPan ausgelöst.Dieses Ereignis ist nützlich, um dem Spieler zu ermöglichen, die Rotation von UI-Elementen auf dem Bildschirm zu manipulieren.
Dieses Ereignis wird mit einer Tabelle von Vector2, die die relativen Bildschirmpositionen der Finger beschreibt, die an der Geste beteiligt sind, ausgelöst.Darüber hinaus feuert es mehrere Male ab: Enum.UserInputState.Begin nach einer kurzen Verzögerung, Enum.UserInputState.Change wenn der Spieler einen Finger während der Geste bewegt, und schließlich mit Enum.UserInputState.End.
Da dieses Ereignis mindestens zwei Finger erfordert, ist es nicht möglich, es im Studio mit dem Emulator und einer Maus zu simulieren; du musst ein echtes berührungsbeschaltetes Gerät haben.
Parameter
Ein Luau- Array von Vector2 Objekten, die jedes die Position aller Finger anzeigt, die an der Geste beteiligt sind.
Eine Flut, die anzeigt, wie viel die Rotation seit Beginn der Geste gegangen ist.
Eine Flut, die anzeigt, wie schnell die Geste ausgeführt wird.
Weist auf die Enum.UserInputState der Geste hin.
Code-Beispiele
This code sample is meant for a LocalScript within an inner Frame that is inside an outer Frame, or other GuiObject. It allows the player to rotate the inner frame by performing a GuiObject.TouchRotate gesture on the outer frame.
local innerFrame = script.Parent
local outerFrame = innerFrame.Parent
outerFrame.BackgroundTransparency = 0.75
outerFrame.Active = true
outerFrame.Size = UDim2.new(1, 0, 1, 0)
outerFrame.Position = UDim2.new(0, 0, 0, 0)
outerFrame.AnchorPoint = Vector2.new(0, 0)
outerFrame.ClipsDescendants = true
local dragging = false
local baseRotation = innerFrame.Rotation
local function onTouchRotate(_touchPositions, rotation, _velocity, state)
if state == Enum.UserInputState.Begin and not dragging then
dragging = true
baseRotation = innerFrame.Rotation
outerFrame.BackgroundTransparency = 0.25
elseif state == Enum.UserInputState.Change then
innerFrame.Rotation = baseRotation + rotation
elseif state == Enum.UserInputState.End and dragging then
dragging = false
outerFrame.BackgroundTransparency = 0.75
end
end
outerFrame.TouchRotate:Connect(onTouchRotate)
TouchSwipe
Dieses Ereignis wird ausgelöst, wenn der Spieler eine Wischgeste auf dem UI-Element mit einem touchaktiven Gerät ausführt.Es feuert mit der Richtung der Geste (Oben, Unten, Links oder Rechts) und der Anzahl der berührenden Punkte bei der Geste ab.Wischen-Gesten werden oft verwendet, um Registerkarten in mobilen UI zu ändern.
Da dieses Ereignis nur einen Finger erfordert, kann es im Studio mit dem Emulator und einer Maus simuliert werden.
Parameter
Ein A Enum.SwipeDirection, das die Richtung der Wischgeste anzeigt (Oben, Unten, Links oder Rechts).
Die Anzahl der Berührungspunkte, die an der Geste beteiligt sind (normalerweise 1).
Code-Beispiele
This code sample will cause a Frame (or other GuiObject) to bounce when a swipe gesture is performed on a touch-enabled device (or Studio's emulator). Horizontal swipes will change the hue of the GuiObject.BackgroundColor3, while vertical swipes will change the saturation.
local frame = script.Parent
frame.Active = true
-- How far the frame should bounce on a successful swipe
local BOUNCE_DISTANCE = 50
-- Current state of the frame
local basePosition = frame.Position
local hue = 0
local saturation = 128
local function updateColor()
frame.BackgroundColor3 = Color3.fromHSV(hue / 256, saturation / 256, 1)
end
local function onTouchSwipe(swipeDir, _touchCount)
-- Change the BackgroundColor3 based on the swipe direction
local deltaPos
if swipeDir == Enum.SwipeDirection.Right then
deltaPos = UDim2.new(0, BOUNCE_DISTANCE, 0, 0)
hue = (hue + 16) % 255
elseif swipeDir == Enum.SwipeDirection.Left then
deltaPos = UDim2.new(0, -BOUNCE_DISTANCE, 0, 0)
hue = (hue - 16) % 255
elseif swipeDir == Enum.SwipeDirection.Up then
deltaPos = UDim2.new(0, 0, 0, -BOUNCE_DISTANCE)
saturation = (saturation + 16) % 255
elseif swipeDir == Enum.SwipeDirection.Down then
deltaPos = UDim2.new(0, 0, 0, BOUNCE_DISTANCE)
saturation = (saturation - 16) % 255
else
deltaPos = UDim2.new()
end
-- Update the color and bounce the frame a little
updateColor()
frame.Position = basePosition + deltaPos
frame:TweenPosition(basePosition, Enum.EasingDirection.Out, Enum.EasingStyle.Bounce, 0.7, true)
end
frame.TouchSwipe:Connect(onTouchSwipe)
updateColor()
TouchTap
Dieses Ereignis wird ausgelöst, wenn der Spieler eine Tap-Geste auf dem UI-Element mit einem touch-aktivierten Gerät ausführt.Ein Tap ist eine schnelle einzige Berührung ohne irgendeine Bewegung involviert (ein längeres Drücken würde GuiObject.TouchLongPress abfeuern, und sich während der Berührung zu bewegen, würde GuiObject.TouchPan und/oder GuiObject.TouchSwipe abfeuern).Es feuert mit einer Tabelle von Vector2 Objekten, die die relativen Positionen der beteiligten Finger beschreiben.
Da dieses Ereignis nur einen Finger erfordert, kann es im Studio mit dem Emulator und einer Maus simuliert werden.
Parameter
Code-Beispiele
This code sample will toggle the GuiObject.BackgroundTransparency of a UI element, like a Frame, when it is tapped on a touch-enabled device.
local frame = script.Parent
frame.Active = true
local function onTouchTap()
-- Toggle background transparency
if frame.BackgroundTransparency > 0 then
frame.BackgroundTransparency = 0
else
frame.BackgroundTransparency = 0.75
end
end
frame.TouchTap:Connect(onTouchTap)