How to Make Your Roblox UI Responsive Across All Devices [UIScale Guide]
The Problem: Your UI Looks Fine in Studio, But Breaks on Mobile
You've built a clean UI in Roblox Studio. Buttons are aligned, text is readable, everything looks polished. Then you open the game on your phone — and it's a mess.
Buttons are cut off. Text is tiny. The whole layout looks wrong.
This is one of the most common issues Roblox developers run into, and it makes sense why: a large portion of Roblox players are on smartphones and tablets, not PCs. If you design only for your own screen, you're designing for a minority of your players.
This guide explains how to use UIScale to build Roblox UIs that adapt to any screen size, with practical examples aimed at beginners and intermediate developers.
Why Does UI Look Different Across Devices?
In Roblox, you can define UI element sizes using either offset (pixels) or scale (proportion of screen size).
If you set a button to {0, 200}, {0, 50} — that's 200px wide and 50px tall regardless of screen size. On a large PC monitor, this might look small. On a small phone screen, it might be enormous, or get clipped entirely.
Because every device has a different screen resolution and aspect ratio, fixed-pixel UI will behave unpredictably across devices.
What Is UIScale?
UIScale is a Roblox object that uniformly adjusts the display size of all UI elements inside a container (like a ScreenGui).
Set UIScale.Scale = 0.8, and every child element renders at 80% of its defined size. Set it to 1.5, and everything scales up to 150%.
On its own, that's just resizing. The real power comes when you combine UIScale with a script that reads the player's screen size and sets the scale value dynamically. That's the foundation of responsive UI in Roblox.
Basic Implementation: Auto-Scaling by Screen Width
The standard approach is to read ViewportSize.X (the screen width in pixels) and set the scale accordingly.
First, set up the following structure in the Explorer panel in Roblox Studio:
StarterGui
└── ScreenGui
├── UIScale ← Add a UIScale object here
└── LocalScript ← Any name is fine (e.g. ScaleController)
Then add the following code inside the LocalScript:
local ScreenGui = script.Parent
local UIScale = ScreenGui:FindFirstChildOfClass("UIScale")
local function updateScale()
local viewportWidth = workspace.CurrentCamera.ViewportSize.X
if viewportWidth < 600 then
UIScale.Scale = 0.75
elseif viewportWidth < 1024 then
UIScale.Scale = 0.9
else
UIScale.Scale = 1.0
end
end
updateScale()
workspace.CurrentCamera:GetPropertyChangedSignal("ViewportSize"):Connect(updateScale)
Here's a quick reference for the recommended scale values by device type:
| Device | ViewportSize.X | Recommended Scale |
|---|---|---|
| Smartphone | Under 600px | 0.75 |
| Tablet | 600px – 1024px | 0.9 |
| Desktop / PC | 1024px and above | 1.0 |
Adjust the breakpoints and scale values to match your specific UI design.
Finding the Right Scale Values
Choosing the right scale values depends on your UI layout and target devices. Doing this by hand every time is tedious.
Roblox UI Scale Calculator lets you input screen dimensions and base sizes to quickly find appropriate scale values. It's useful during development when you want to check how your UI would look across different screen sizes without switching devices constantly.
A Note From Experience
When I first started making Roblox games, the UI looked great on my PC — but when I tested it on a smartphone, it looked completely different. Learning that a large portion of Roblox players are on mobile changed how I think about UI design from the very beginning.
UIScale is simple once you understand it, but the difference it makes for players on smaller screens is significant. Building it in from the start is much easier than retrofitting it later.
Summary
- Most Roblox players are on mobile — designing only for PC will let a large portion of your audience down
UIScalelets you uniformly resize all UI elements in a container- Place both
UIScaleand aLocalScriptinsideStarterGui > ScreenGuias the basic setup - Reading
ViewportSize.Xand setting scale values conditionally is the standard responsive pattern - Use Roblox UI Scale Calculator to find scale values quickly without manual math