Every Roblox game is judged twice. First on its thumbnail, then — about four seconds after a player joins — on its interface. A game with sharp art and a stack of misaligned grey buttons reads as unfinished, and players leave before they ever reach the good part.
This guide covers building a Roblox UI properly: the object hierarchy, the sizing system that actually survives contact with a phone screen, the constraints that do your layout work for you, and the specific mistakes that make an otherwise decent game look like a first project.
The parts of a Roblox UI
Roblox UI is a tree of objects, and almost everything you will ever build uses six of them.
| Object | What it is | Use it for |
|---|---|---|
ScreenGui |
The root container, lives in StarterGui |
One per screen: HUD, shop, settings |
Frame |
A rectangle | Panels, cards, bars, dividers, backgrounds |
TextLabel |
Non-interactive text | Titles, prices, counters, descriptions |
TextButton |
Text you can click | Buy, close, confirm, tab switches |
ImageLabel |
An image | Icons, illustrations, decorative art |
ImageButton |
An image you can click | Icon-only buttons, item slots |
Anything you put inside a ScreenGui in StarterGui is copied into each player's PlayerGui when they join. That copy is what they actually see, which is why runtime changes go to PlayerGui, not to the template in StarterGui.
The modifiers matter as much as the objects. UICorner rounds edges. UIGradient fills a Frame with a gradient. UIStroke gives text or a Frame a clean outline. UIListLayout and UIGridLayout position children for you. UIPadding gives a panel breathing room. UIAspectRatioConstraint stops a square going oblong on a wide screen. Together those six modifiers are the difference between "looks designed" and "looks default".
Scale versus offset: the one thing to get right
UDim2 is the sizing type, and it holds four numbers: {XScale, XOffset}, {YScale, YOffset}.
- Scale is a fraction of the parent.
0.5means half the parent's width. - Offset is a number of pixels.
200means 200 pixels, no matter what.
New developers drag things around in Studio, which writes offsets, and everything looks perfect — on their monitor. Then a player opens the game on a phone, the viewport is a third of the size, and the shop panel is now wider than the screen with two buttons hanging off the edge.
Lay out in scale:
-- A panel that is always 60% × 70% of the screen, centred.
panel.AnchorPoint = Vector2.new(0.5, 0.5)
panel.Position = UDim2.fromScale(0.5, 0.5)
panel.Size = UDim2.fromScale(0.6, 0.7)
AnchorPoint decides which part of the object sits at Position. Vector2.new(0.5, 0.5) anchors the centre, so the panel is genuinely centred rather than starting at the centre and running off to the right.
Offset still has its uses — a 2 px divider, an 8 px gap, a border. The rule is simple: scale for anything that should grow with the screen, offset for anything that should stay the same physical size.
Step-by-step: build a settings panel
- Insert a ScreenGui. In
StarterGui, add aScreenGui, name itSettingsGui, and setResetOnSpawnto false so it survives a player respawn. SetIgnoreGuiInsetto true if you want it to cover the top-bar area. - Add the backdrop. Insert a
Framefilling the whole screen:Size = UDim2.fromScale(1, 1), a darkBackgroundColor3, andBackgroundTransparencyaround 0.4. It dims the game behind the menu and catches stray clicks. - Add the panel. Inside the backdrop, insert another
Frame. Anchor it atVector2.new(0.5, 0.5), position it atUDim2.fromScale(0.5, 0.5), size itUDim2.fromScale(0.45, 0.6). Add aUICornerwith a 16 px radius and aUIStrokeone or two pixels wide in a lighter tone. - Add the header. A
TextLabelat the top of the panel,Size = UDim2.fromScale(1, 0.12),BackgroundTransparency = 1, your title text,TextScaledon. Put the closeTextButtonin the top-right corner of the panel with aUIAspectRatioConstraintso it stays square. - Add a list body. Insert a
Frameunder the header for the rows, then drop aUIListLayoutinto it withPadding = UDim.new(0, 8)andSortOrder = LayoutOrder. Every row you add now positions itself automatically. - Add the rows. Each row is a
Framewith aTextLabelon the left and a toggleTextButtonon the right. Build one, style it, then duplicate it — consistency is most of what makes UI look professional. - Add padding. Drop a
UIPaddinginto the panel with 16 px on every side. Nothing makes an interface look cheaper than text touching the edge of its container. - Test on every device. Use Studio's device emulator and check phone, tablet and desktop. Anything that shifts, overflows or overlaps is an offset that should have been a scale.
Layout constraints do the boring work
Hand-positioning twenty inventory slots is a waste of an evening, and it breaks the first time you change the panel size.
UIListLayoutstacks children vertically or horizontally with even padding. Use it for settings rows, shop entries, leaderboards, chat lines.UIGridLayoutarranges children in a grid with a fixed cell size. Use it for inventories, item shops, emote pickers.UIAspectRatioConstraintlocks an object's width-to-height ratio. Use it on anything square — item slots, avatar frames, icon buttons.UISizeConstraintclamps minimum and maximum pixel size, which stops a scaled panel becoming unreadably small on a phone or absurdly large on an ultrawide.
Set the layout once, add children in any order, and let LayoutOrder control the sequence.
Seven mistakes that make a UI look amateur
- Everything in offset. Covered above, and it is the single most common one.
- No padding. Text jammed against a border. Add
UIPaddingto every panel. - Too many fonts. One display font for headings, one clean font for body. That is the whole budget.
- Random corner radii. Pick one radius — 8, 12 or 16 px — and use it everywhere.
- Pure black and pure white.
#000000and#FFFFFFlook harsh on a screen. Use a near-black like#12121Aand a soft white like#F2F2F5. - Tiny touch targets. More than half of Roblox play is mobile. Anything tappable should be at least 44 px tall on a phone.
- No visual hierarchy. If every element is the same size and colour, the player's eye has nowhere to land. One primary action per screen, brighter and bigger than everything else.
Colour and contrast that survive a screenshot
Roblox thumbnails and UI share a problem: they are viewed small, fast, and often on a bright screen outdoors. Contrast wins.
Build on three colours. A dark neutral base for panels, a light neutral for text, and one saturated accent for the thing you want tapped. Everything else — hover states, disabled states, dividers — is a lighter or darker step of those three. If your palette needs a fourth colour, it is usually a hierarchy problem wearing a costume.
Check your text against its background. Body text wants a contrast ratio of at least 4.5:1; large headings can go to 3:1. Light grey text on a mid-grey panel reads fine on your calibrated monitor and disappears entirely on a phone in daylight.
Generating the UI instead of building it
The steps above are the craft, and knowing them is what lets you judge a result. But laying out a full shop by hand is still an evening of dragging Frames around.
The VizzBees UI Maker takes a description — "a cartoon shop with a rainbow header, two offer cards and a nav bar" — and returns two things: a mockup image of the whole screen so you can judge the art direction, and then a real Studio tree built from it. Panels come back as Frames with UICorner, UIGradient and UIStroke. Text comes back as live TextLabel objects you can retype, restyle and translate. Only genuine icons arrive as images.
That distinction matters more than it sounds. A generated image of a UI has to be rebuilt by hand before it does anything, and its text is frozen in one language at one size forever. A generated hierarchy opens in Studio and behaves like something you built yourself, which means you can iterate on it in minutes rather than starting over.
Read the Roblox GUI size guide next for the dimensions and scaling rules in full, or the shop GUI tutorial for a complete worked example.
FAQ
How do I make a GUI in Roblox Studio? Insert a ScreenGui into StarterGui, add a Frame for each panel, size everything with UDim2 scale rather than offset, then add TextLabels, TextButtons and ImageLabels inside. Add UICorner, UIPadding and a UIListLayout to make it look designed rather than default.
What is the difference between scale and offset in Roblox? Scale is a fraction of the parent object's size, so a 0.5 scale is always half the parent's width regardless of screen. Offset is a fixed number of pixels. Use scale for anything that should grow with the screen and offset only for details that must stay a constant physical size, like a 2 px divider.
Where should a ScreenGui go? In StarterGui. Roblox copies its contents into each player's PlayerGui when they join, and that copy is what the player sees. Set ResetOnSpawn to false if the interface should survive a respawn.
Why does my Roblox UI break on mobile? Almost always because it was positioned in offset. A layout built from pixel values looks correct on the monitor it was made on and overflows on a smaller viewport. Rebuild positions and sizes with UDim2.fromScale and add UISizeConstraint where a minimum readable size matters.
Do I need to script to build a Roblox UI? Not to build the visuals — the whole hierarchy can be assembled in the Explorer with no code. You need Lua only to make buttons do something: open a menu, buy an item, change a setting.
Can AI make a Roblox UI? Yes. The VizzBees UI Maker generates a mockup from a text description and then converts it into a real Studio hierarchy of Frames and TextLabels, not a flat image. It is included with the Creator, Pro and Studio plans.