17 min read

Source: Roblox Creator Hub · CC BY 4.0 · View source · Code samples: MIT Imported 2026-10-03. Formatting adapted for this site.

GuiButton

Inherits from: GuiObject → GuiBase2d → GuiBase → Instance → Object

GuiButton is an abstract class that inherits from GuiObject. It is the base class for the interactive, clickable ImageButton and TextButton objects. This class also defines several properties for interactive behavior, namely AutoButtonColor and Modal.

The most important event of a GuiButton is Activated, a multi-platform event that fires when the button is activated. When using a mouse, this means clicking the button and releasing with the cursor still over the UI object. For touch, the same applies but with a touch instead of button press. Finally, for gamepads, Activated fires if a GuiButton is selected when the A button is pressed and released. In short, this event is very useful for multi-platform user interface programming as it provides a nice general interface for a single user input.

Inherits from: GuiObject

Descendants: ImageButton, TextButton

Memory category: Gui

Tags: NotCreatable, NotBrowsable

Properties

NameType / ReturnsDescription
GuiButton.AutoButtonColorbooleanDetermines whether the button automatically changes color when the mouse hovers over or clicks on it.
GuiButton.HoverHapticEffectHapticEffectA HapticEffect instance that will play when the GuiButton is being hovered.
GuiButton.ModalbooleanIf true while the GUI element is visible, the mouse will not be locked unless the right mouse button is down.
GuiButton.PressHapticEffectHapticEffectA HapticEffect instance that will play when the GuiButton is being pressed.
GuiButton.SelectedbooleanA boolean property which indicates whether the object has been selected.
GuiButton.StyleButtonStyleSets the style of the GuiButton based on a list of pre-determined styles.

Inherited from GuiObject

NameType / ReturnsDescription
GuiObject.ActivebooleanDetermines whether this UI element sinks input.
GuiObject.AnchorPointVector2Determines the origin point of a GuiObject, relative to its absolute size.
GuiObject.AutomaticSizeAutomaticSizeDetermines whether resizing occurs based on child content.
GuiObject.BackgroundColorBrickColorDetermines the color of the GuiObject background.
GuiObject.BackgroundColor3Color3Determines the GuiObject background color.
GuiObject.BackgroundTransparencyfloatDetermines the transparency of the GuiObject background and border.
GuiObject.BorderColorBrickColorDetermines the color of the GuiObject border.
GuiObject.BorderColor3Color3Determines the color of the GuiObject border.
GuiObject.BorderModeBorderModeDetermines in what manner the GuiObject border is laid out relative to its dimensions.
GuiObject.BorderSizePixelintDetermines the pixel width of the GuiObject border.
GuiObject.ClipsDescendantsbooleanDetermines if descendant GuiObjects outside of the bounds of a parent GUI element should render.
GuiObject.DraggablebooleanDetermines whether a GuiObject (and its descendants) can be dragged around the screen.
GuiObject.GuiStateGuiStateDetermines whether the player's mouse is being actively pressed on the GuiObject or not.
GuiObject.InputSinkInputSinkControls whether, and how, the GuiObject sinks input that occurs over it.
GuiObject.InteractablebooleanDetermines whether the GuiButton can be interacted with or not, or if the GuiState of the GuiObject is changing or not.
GuiObject.LayoutOrderintControls the sort order of the GuiObject when used with a UIGridStyleLayout.
GuiObject.NextSelectionDownGuiObjectSets the GuiObject which will be selected when the gamepad selector is moved downward.
GuiObject.NextSelectionLeftGuiObjectSets the GuiObject which will be selected when the gamepad selector is moved to the left.
GuiObject.NextSelectionRightGuiObjectSets the GuiObject which will be selected when the gamepad selector is moved to the right.
GuiObject.NextSelectionUpGuiObjectSets the GuiObject which will be selected when the gamepad selector is moved upward.
GuiObject.PositionUDim2Determines the pixel and scalar position of the GuiObject.
GuiObject.RotationfloatDetermines the number of degrees by which the GuiObject is rotated.
GuiObject.SelectablebooleanDetermine whether the GuiObject can be selected by a gamepad.
GuiObject.SelectionImageObjectGuiObjectOverrides the default selection adornment used for gamepads.
GuiObject.SelectionOrderintThe order of GuiObjects selected by the gamepad UI selection.
GuiObject.SizeUDim2Determines the pixel and scalar size of the GuiObject.
GuiObject.SizeConstraintSizeConstraintSets the Size axes that the GuiObject will be based on, relative to the size of its parent.
GuiObject.TransparencyfloatA mixed property of BackgroundTransparency and TextTransparency.
GuiObject.VisiblebooleanDetermines whether the GuiObject and its descendants will be rendered.
GuiObject.ZIndexintDetermines the order in which a GuiObject renders relative to others.

Inherited from GuiBase2d

NameType / ReturnsDescription
GuiBase2d.AbsolutePositionVector2Describes the actual screen position of a GuiBase2d element, in pixels.
GuiBase2d.AbsoluteRotationfloatDescribes the actual screen rotation of a GuiBase2d element, in degrees.
GuiBase2d.AbsoluteSizeVector2Describes the actual screen size of a GuiBase2d element, in pixels.
GuiBase2d.AutoLocalizebooleanWhen set to true, localization will be applied to this GuiBase2d and its descendants.
GuiBase2d.LocalizebooleanAutomatically set to true when a localization table's LocalizationTable.Root targets this object, or an ancestor of this object.
GuiBase2d.RootLocalizationTableLocalizationTableA reference to a LocalizationTable to be used to apply automated localization to this GuiBase2d and its descendants.
GuiBase2d.SelectionBehaviorDownSelectionBehaviorCustomizes gamepad selection behavior in the down direction.
GuiBase2d.SelectionBehaviorLeftSelectionBehaviorCustomizes gamepad selection behavior in the left direction.
GuiBase2d.SelectionBehaviorRightSelectionBehaviorCustomizes gamepad selection behavior in the right direction.
GuiBase2d.SelectionBehaviorUpSelectionBehaviorCustomizes gamepad selection behavior in the up direction.
GuiBase2d.SelectionGroupbooleanAllows customization of gamepad selection movement.

Inherited from Instance

NameType / ReturnsDescription
Instance.ArchivablebooleanDetermines if an Instance and its descendants can be cloned using Instance:Clone(), and can be saved/published.
Instance.archivableboolean
Instance.CapabilitiesSecurityCapabilitiesThe set of capabilities allowed to be used for scripts inside this container.
Instance.IsInSandboxbooleanIndicates whether the instance is inside a sandboxed container.
Instance.NamestringA non-unique identifier of the Instance.
Instance.ParentInstanceDetermines the hierarchical parent of the Instance.
Instance.PredictionModePredictionModeReflects the client-side prediction mode applied to the instance under server-authoritative physics.
Instance.RobloxLockedbooleanA deprecated property that used to protect CoreGui objects.
Instance.SandboxedbooleanWhen enabled, the instance can only access abilities in its Capabilities list.
Instance.UniqueIdUniqueIdA unique identifier for the instance.

Inherited from Object

NameType / ReturnsDescription
Object.ClassNamestringA read-only string representing the class this Object belongs to.
Object.classNamestring

GuiButton.AutoButtonColor

This property determines whether the button automatically changes color when the user's Mouse hovers over or clicks on it. If true, the button will automatically change color when the mouse hovers over or clicks on it. If false, the button will not change.

If you would like to customize how a button changes when the user's mouse hovers over or clicks on it, consider using an ImageButton and changing the element's HoverImage and PressedImage.

Please note that this property will not have an effect on an ImageButton if its Image property is set to an image. Additionally, this property will not affect an ImageButton on mouse hover when its HoverImage is not nil, nor on mouse click if its PressedImage is not nil.

FieldValue
typeboolean
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryData
serialization{"can_load":true,"can_save":true}
capabilities["UI"]

GuiButton.HoverHapticEffect

A HapticEffect that the engine plays the first time the pointer moves over the button, when the button transitions from its idle state to its hover state. Assign a HapticEffect to give hover feedback (for example, a light effect on gamepad or mobile); leave it unset for no hover haptics.

The effect plays through the standard HapticService mixer, so whether the player actually feels vibration depends on their device and haptic settings. This property defaults to nil (no effect).

FieldValue
typeHapticEffect
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryHaptic
serialization{"can_load":true,"can_save":true}
capabilities["UI"]

GuiButton.Modal

If true while the GUI element is visible, the mouse will not be locked unless the right mouse button is down.

FieldValue
typeboolean
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryData
serialization{"can_load":true,"can_save":true}
capabilities["UI"]

GuiButton.PressHapticEffect

A HapticEffect that the engine plays when the button enters its pressed state. Assign a HapticEffect to give press or click feedback; leave it unset for no press haptics.

The effect plays through the standard HapticService mixer, so whether the player actually feels vibration depends on their device and haptic settings. This property defaults to nil (no effect).

FieldValue
typeHapticEffect
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryHaptic
serialization{"can_load":true,"can_save":true}
capabilities["UI"]

GuiButton.Selected

When set to true, the button renders in a highlighted "selected" state instead of its normal idle appearance. This property defaults to false, and the engine never changes it automatically; set it yourself to mark a button as selected.

Selected only has a visual effect on the legacy ButtonStyle presets (the Roblox* styles) with AutoButtonColor enabled, where it swaps in the button's highlighted image. It has no effect under the default Style of Custom. It is unrelated to gamepad and controller UI navigation; the currently focused element is tracked separately by SelectedObject.

FieldValue
typeboolean
security{"read":"None","write":"None"}
thread safetyReadSafe
categorySelection
serialization{"can_load":true,"can_save":true}
capabilities["UI"]

GuiButton.Style

Sets the button's overall appearance from a fixed set of ButtonStyle presets. The default value is Custom, which applies no built-in styling and lets you control the button's appearance entirely through properties such as BackgroundColor3 and, for an ImageButton, its images.

A legacy method of applying a fixed set of Roblox-themed button styles. The remaining presets (RobloxButton, RobloxButtonDefault, RobloxRoundButton, RobloxRoundDefaultButton, and RobloxRoundDropdownButton) render Roblox-themed button art. New interfaces should keep Custom and style the button directly. This property defaults to ButtonStyle.Custom.

FieldValue
typeButtonStyle
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryData
serialization{"can_load":true,"can_save":true}
capabilities["UI"]

Events

NameType / ReturnsDescription
GuiButton.ActivatedFires when the button is activated.
GuiButton.MouseButton1ClickFires when the user's mouse fully left clicks the GuiButton.
GuiButton.MouseButton1DownFires when the user presses their left mouse button down on the GuiButton.
GuiButton.MouseButton1UpFires when the user releases their left mouse button off of the GuiButton.
GuiButton.MouseButton2ClickFires when the user's mouse fully right clicks the GuiButton.
GuiButton.MouseButton2DownFires when the user presses their right mouse button down on the GuiButton.
GuiButton.MouseButton2UpFires when the user releases their right mouse button off of the GuiButton.
GuiButton.SecondaryActivatedFires when the button's "secondary" input is activated.

Inherited from GuiObject

NameType / ReturnsDescription
GuiObject.DragBeginFired when a player begins dragging the object.
GuiObject.DragStoppedFired when a player stops dragging the object.
GuiObject.InputBeganFired when a user begins interacting via a Human-Computer Interface device (Mouse button down, touch begin, keyboard button down, etc).
GuiObject.InputChangedFired when a user changes how they're interacting via a Human-Computer Interface device (Mouse button down, touch begin, keyboard button down, etc).
GuiObject.InputEndedFired when a user stops interacting via a Human-Computer Interface device (Mouse button down, touch begin, keyboard button down, etc).
GuiObject.MouseEnterFires when a user moves their mouse into a GUI element.
GuiObject.MouseLeaveFires when a user moves their mouse out of a GUI element.
GuiObject.MouseMovedFires whenever a user moves their mouse while it is inside a GUI element.
GuiObject.MouseWheelBackwardFires when a user scrolls their mouse wheel back when the mouse is over a GUI element.
GuiObject.MouseWheelForwardFires when a user scrolls their mouse wheel forward when the mouse is over a GUI element.
GuiObject.SelectionGainedFired when the GuiObject is being focused on with the Gamepad selector.
GuiObject.SelectionLostFired when the Gamepad selector stops focusing on the GuiObject.
GuiObject.TouchLongPressFires when the player starts, continues and stops long-pressing the UI element.
GuiObject.TouchPanFires when the player moves their finger on the UI element.
GuiObject.TouchPinchFires when the player performs a pinch or pull gesture using two fingers on the UI element.
GuiObject.TouchRotateFires when the player performs a rotation gesture using two fingers on the UI element.
GuiObject.TouchSwipeFires when the player performs a swipe gesture on the UI element.
GuiObject.TouchTapFires when the player performs a tap gesture on the UI element.

Inherited from GuiBase2d

NameType / ReturnsDescription
GuiBase2d.SelectionChangedFires when the gamepad selection moves to, leaves, or changes within the connected GuiBase2d or any descendant GuiObjects.

Inherited from Instance

NameType / ReturnsDescription
Instance.AncestryChangedFires when the Instance.Parent property of this object or one of its ancestors is changed.
Instance.AttributeChangedFires whenever an attribute is changed on the Instance.
Instance.ChildAddedFires after an object is parented to this Instance.
Instance.childAdded
Instance.ChildRemovedFires after a child is removed from this Instance.
Instance.DescendantAddedFires after a descendant is added to the Instance.
Instance.DescendantRemovingFires immediately before a descendant of the Instance is removed.
Instance.DestroyingFires immediately before (or is deferred until after) the instance is destroyed via Instance:Destroy().
Instance.StyledPropertiesChangedFires whenever any style property is changed on the instance, including when a property is set to nil.

Inherited from Object

NameType / ReturnsDescription
Object.ChangedFires immediately after a property of the object changes, with some limitations.

GuiButton.Activated

Fires when a left click press-and-release is detected on desktop, touch release is detected on mobile, or A/cross is activated in UI navigation mode on console. The first time this method is called, clickCount will start at 0.

As this event doesn't fire on the server, it should only be used in a LocalScript, or in a Script with RunContext of RunContext.Client.

Parameters

NameTypeDefaultDescription
inputObjectInputObjectAn InputObject representing the user input that activated the button.
clickCountintThe number of consecutive rapid activations, starting at 0 for the first activation and incrementing with each subsequent activation within quick succession of the previous one.
FieldValue
securityNone
capabilities["UI"]

GuiButton.MouseButton1Click

This event fires when the user's mouse fully left clicks the GuiButton.

In regards to clicking, the mouse must be in bounds of the GuiButton and the mouse button must be pressed down and up again before this event fires. If the mouse leaves the bounds of the GuiButton and is released, the event will not fire. If you would like to avoid this limitation, you can use MouseButton1Down and MouseButton1Up; these events are similar but will fire whenever the user presses their left mouse button down or up, respectively.

FieldValue
securityNone
capabilities["UI"]

GuiButton.MouseButton1Down

This event fires when the user presses their left mouse button down on the GuiButton.

For an event requiring the user to press and release their left mouse on a GuiButton in order for the event to fire, consider using MouseButton1Click.

Parameters

NameTypeDefaultDescription
xintThe mouse's X screen coordinate in pixels.
yintThe mouse's Y screen coordinate in pixels.
FieldValue
securityNone
capabilities["UI"]

GuiButton.MouseButton1Up

This event fires when the user releases their left mouse button off of the GuiButton.

For an event requiring the user to press and release their left mouse on a GuiButton in order for the event to fire, consider using MouseButton1Click.

Parameters

NameTypeDefaultDescription
xintThe mouse's X screen coordinate in pixels.
yintThe mouse's Y screen coordinate in pixels.
FieldValue
securityNone
capabilities["UI"]

GuiButton.MouseButton2Click

This event fires when the user's mouse fully right clicks the GuiButton.

In regards to clicking, the mouse must be in bounds of the GuiButton and the mouse button must be pressed down and up again before this event fires. If the mouse leaves the bounds of the GuiButton and is released, the event will not fire. If you would like to avoid this limitation, you can use MouseButton2Down and MouseButton2Up; these events are similar but will fire whenever the user presses their right mouse button down or up, respectively.

FieldValue
securityNone
capabilities["UI"]

GuiButton.MouseButton2Down

This event fires when the user presses their right mouse button down on the GuiButton.

For an event requiring the user to press and release their right mouse on a GuiButton in order for the event to fire, consider using MouseButton2Click.

Parameters

NameTypeDefaultDescription
xintThe mouse's X screen coordinate in pixels.
yintThe mouse's Y screen coordinate in pixels.
FieldValue
securityNone
capabilities["UI"]

GuiButton.MouseButton2Up

This event fires when the user releases their right mouse button off of the GuiButton.

For an event requiring the user to press and release their right mouse on a GuiButton in order for the event to fire, consider using MouseButton2Click.

Parameters

NameTypeDefaultDescription
xintThe mouse's X screen coordinate in pixels.
yintThe mouse's Y screen coordinate in pixels.
FieldValue
securityNone
capabilities["UI"]

GuiButton.SecondaryActivated

Fires when a right-click press-and-release is detected from a mouse, long press is detected on a touch input, R3 is detected from a gamepad, or AltEnter is detected in UI navigation mode using keyboard.

Parameters

NameTypeDefaultDescription
inputObjectInputObjectThe input object representing the alternate activation action.
FieldValue
securityNone
capabilities["UI"]

Methods

Inherited from GuiObject

NameType / ReturnsDescription
GuiObject:TweenPositionbooleanSmoothly moves a GUI to a new UDim2.
GuiObject:TweenSizebooleanSmoothly resizes a GuiObject to a new UDim2.
GuiObject:TweenSizeAndPositionbooleanSmoothly moves a GUI to a new size and position.

Inherited from Instance

NameType / ReturnsDescription
Instance:AddTag()Applies a tag to the instance.
Instance:childrenInstancesReturns an array of the object's children.
Instance:ClearAllChildren()This method destroys all of an instance's children.
Instance:CloneInstanceCreate a copy of an instance and all its descendants, ignoring instances that are not Archivable.
Instance:cloneInstance
Instance:Destroy()Sets the Instance.Parent property to nil, locks the Instance.Parent property, disconnects all connections, and calls Destroy() on all children.
Instance:destroy()
Instance:FindFirstAncestorInstance?Returns the first ancestor of the Instance whose Instance.Name is equal to the given name.
Instance:FindFirstAncestorOfClassInstance?Returns the first ancestor of the Instance whose Object.ClassName is equal to the given className.
Instance:FindFirstAncestorWhichIsAInstance?Returns the first ancestor of the Instance for whom Object:IsA() returns true for the given className.
Instance:FindFirstChildInstance?Returns the first child of the Instance found with the given name.
Instance:findFirstChildInstance
Instance:FindFirstChildOfClassInstance?Returns the first child of the Instance whose ClassName is equal to the given class name.
Instance:FindFirstChildWhichIsAInstance?Returns the first child of the Instance for whom Object:IsA() returns true for the given className.
Instance:FindFirstDescendantInstance?Returns the first descendant found with the given Instance.Name.
Instance:GetActorActor?Returns the Actor associated with the Instance, if any.
Instance:GetAttributeVariantReturns the value which has been assigned to the given attribute name.
Instance:GetAttributeChangedSignalRBXScriptSignalReturns an event that fires when the given attribute changes.
Instance:GetAttributesDictionaryReturns a dictionary of the instance's attributes.
Instance:GetChildrenInstancesReturns an array containing all of the instance's children.
Instance:getChildrenInstances
Instance:GetDebugIdstringReturns a coded string of the debug ID used internally by Roblox.
Instance:GetDescendantsInstancesReturns an array containing all of the descendants of the instance.
Instance:GetFullNamestringReturns a string describing the instance's ancestry.
Instance:GetStyledVariantReturns the styled or explicitly modified value of the specified property, or else the default property value if it hasn't been styled/modified.
Instance:GetStyledPropertyChangedSignalRBXScriptSignalReturns an event that fires when the given style property changes on the instance.
Instance:GetTagsArrayGets an array of all tags applied to the instance.
Instance:HasTagbooleanCheck whether the instance has a given tag.
Instance:IsAncestorOfbooleanReturns true if an Instance is an ancestor of the given descendant.
Instance:IsDescendantOfbooleanReturns true if an Instance is a descendant of the given ancestor.
Instance:isDescendantOfboolean
Instance:IsPropertyModifiedbooleanReturns true if the value stored in the specified property is not equal to the code-instantiated default.
Instance:QueryDescendantsInstancesReturns an array containing all descendants of the instance that match the selector string.
Instance:Remove()Sets the object's Parent to nil, and does the same for all its descendants.
Instance:remove()
Instance:RemoveTag()Removes a tag from the instance.
Instance:ResetPropertyToDefault()Resets a property to its default value.
Instance:SetAttribute()Sets the attribute with the given name to the given value.
Instance:WaitForChildInstanceReturns the child of the Instance with the given name. If the child does not exist, it will yield the current thread until it does.

Inherited from Object

NameType / ReturnsDescription
Object:GetPropertyChangedSignalRBXScriptSignalGet an event that fires when a given property of the object changes.
Object:IsAbooleanReturns true if an object's class matches or inherits from a given class.
Object:isAboolean