Skip to content

A Main Menu and Settings Screen

By the end of this page your game will open on a proper title screen with Play, Settings and Credits buttons, a settings panel whose toggles actually do something and are remembered next time, and clean animated transitions between all of it.

Time: 30 to 45 minutes.

Cost: about five or six messages. Build messages are charged by how much work each one takes rather than a flat rate, with a minimum of 0.1 credits per message — the credits pill in the dashboard header shows your balance.

You need: Roblox Studio open on a place you can edit, and the Revix plugin connected — the pill at the top of the dashboard should show your game's name with a green dot. If it does not, start with Setup.

What you're building

A menu is the first thing anyone sees, so it is worth more care than most screens. You are building four things: a loading curtain that hides the world while it streams in, a title screen with a column of buttons, a settings panel whose controls are wired to something real, and a pause menu you can open mid-game.

Two habits will save you a lot of grief on this page. Describe the look you want in words — genre, mood, one accent colour — rather than leaving it open. And test after every step, because a menu bug usually means a player is locked out of your game entirely.

Done looks like this: you press Play, watch a loading bar fill, land on a title screen, open Settings, turn music off, click Play, and start the game — and next time you join, music is still off.


Step 1 — Build the title screen

text
Build a main menu for my game. Full screen, dark, with a single blue accent colour and a clean modern look. A large game title at the top with a short tagline under it, then a centred column of three buttons: PLAY, SETTINGS, CREDITS. A footer line in the bottom corner with the version number. Give every button a hover state and stagger the buttons in one after another when the menu appears. Keep it readable on a phone as well as a desktop.

What happens. The screen goes into StarterGui together with the script that drives it — Revix treats the wiring script as part of the build, not a follow-up. Every button gets a click handler, hover and press effects, and an entrance animation as standard.

Two things to expect. Revix builds interfaces from shapes, colour and text, not from icon art, and it will not put emoji into Roblox text because the fonts render them as boxes. And before it finishes, it re-reads its own script against the screen it just built, checking every element it refers to exists and every button is connected to something.

Check it worked. Press Play. The menu should cover the screen with the three buttons animating in one after another. Hover each one — it should react.

Step 2 — Make PLAY start the game

text
Make the PLAY button work: fade the menu out over half a second, unlock the player's controls and camera, and destroy the menu so it cannot swallow clicks afterwards. Before that, the player should be frozen in place with the camera locked while the menu is up, so they cannot walk around behind it.

Broadcast the menu opening and closing as an event other scripts can listen to, instead of putting game logic inside the menu script.

What happens. The freeze and unfreeze both get handled. That last paragraph matters more than it reads: menus that call gameplay code directly become impossible to change later, and every extra screen you add makes it worse.

Check it worked. Press Play. You should not be able to move while the menu is up. Click PLAY — the menu fades, and now you can move.

Step 3 — Add the settings panel

text
Add a settings panel that opens when SETTINGS is clicked and returns to the main menu when closed. Same visual style as the menu. A scrolling list of labelled rows with a back button at the top:

- Music, on or off toggle
- Sound effects, on or off toggle
- Music volume, slider from 0 to 100
- Camera shake, on or off toggle
- Graphics, a cycler with Low, Medium and High

Make the list scroll properly so rows below the fold are reachable. Animate the transition between the menu and the panel rather than swapping instantly.

What happens. A new screen appears, wired to the menu. Panels that open on demand are built switched off so they cannot flash on players when they spawn, which is why you will not see this one in the viewport until you open it in a playtest.

Check it worked. Press Play, click SETTINGS. The panel should slide in. Drag the volume slider — the knob should follow your mouse and stop at the ends. Scroll to the bottom of the list and confirm the last row is reachable.

Step 4 — Make the toggles do something

text
Wire the settings controls to real effects. Music and sound effects route through sound groups so toggling them actually silences the right sounds. Music volume drives the music group's volume. Camera shake sets a value the rest of the game reads before shaking. Graphics steps a quality level other scripts can read.

Every setting must apply the moment it changes, and it must also be applied when a player joins, not only when they touch the control.

What happens. This is the step people skip, and it is why so many settings menus in Roblox games do nothing. The second paragraph is the whole trick: a setting that is only applied when you click it is forgotten every single rejoin.

Check it worked. Press Play, open Settings, turn Music off. Any background music should stop immediately. Turn it back on and drag the volume slider — the volume should follow.

Step 5 — Save the settings

text
Save each player's settings so they survive a rejoin. One saved settings table per player, written when a value changes but debounced by about a second so dragging a slider does not fire dozens of saves, plus a save when they leave. Load and apply them when they join, and fall back to sensible defaults if the load fails rather than wiping their choices.

What happens. The saving lives on the server. The debounce is worth asking for by name — a slider that saves on every pixel of movement will get your requests throttled.

Check it worked. Press Play, turn Music off and set volume to 20. Stop the playtest. Press Play again and open Settings. Music should still be off and the slider should still be at 20.

Step 6 — Add the loading screen and the pause menu

text
Add two more pieces in the same visual style.

First a loading screen shown before the main menu: a full screen curtain with the game logo, a progress bar that fills as the game loads, and a rotating tip line. Wait for the game to finish loading before fading it out, then remove it completely so it cannot block clicks.

Second a pause menu opened with the M key during gameplay: dim and blur the world behind it, offer Resume, Settings and Back to Menu, and always clear the blur when it closes or when the player dies.

What happens. The loading curtain goes into ReplicatedFirst rather than StarterGui, because StarterGui does not exist yet at the moment a game starts and a curtain put there flashes the world first. The pause menu is a normal on-demand screen.

Check it worked. Press Play. You should see the loading bar, then the menu. Click PLAY, press M, and confirm the world dims and blurs. Close it and confirm the blur goes away. Then die on purpose while paused — the blur must not stay stuck on.

Finish with a sweep:

text
Check every menu screen for problems and fix what you find, then tell me plainly which parts you could not verify without a playtest.

Make it yours

text
Put a slowly rotating camera view of my map behind the main menu instead of a flat background.
text
Add a Credits screen listing the game name, my username and a thank you line, opening and closing the same way as Settings.
text
Add a key rebinding row to the settings for jump, sprint and interact, saved with the other settings.
text
Add a small news panel on the main menu showing the latest three update notes from a list I can edit in one place.
text
Add a first-time tutorial overlay that appears once after a new player clicks PLAY, pointing at the controls.

If something goes wrong

Clicking PLAY does nothing.

text
Clicking PLAY does nothing. Read the menu script against the actual screen tree, find where the button reference or the connection is wrong, and fix only that.

The menu is stuck on screen and you cannot move.

text
The main menu never goes away and I am frozen. Make sure the menu is destroyed when PLAY is clicked, the controls are unlocked, and no invisible full-screen frame is left covering the game.

The buttons animate but do not move.

text
The button entrance animation runs but the buttons do not visibly move. Animate transparency and scale instead of position, because the layout owns their position and overwrites it.

The panel is off screen or the wrong size on a phone.

text
The settings panel is half off the screen on a phone. Fix its anchoring and sizing so it stays centred at every screen size, and check nothing else is off screen.

Settings reset every rejoin.

text
My settings reset every time I rejoin in Studio. Tell me exactly what I need to switch on in Studio for saving to work, then read the output window and fix any errors you find.

The build stopped before it finished. A card reading "That one stopped early" appears with a Keep going button. Press it, or type continue. Nothing already built is undone.

Next