Build and Publish Your First Roblox Obby

Build a 5-stage Roblox obby with checkpoints, kill bricks, and a leaderboard.

Introduction

30 Second Summary

Obstacle courses are addictive. Whether it's a TV show like Ninja Warrior or a playground challenge, the "try, fail, retry" loop keeps people coming back.

In this project, you will build and publish a fully playable obstacle course game (called an "obby") on Roblox with colored platforms, hazard bricks, checkpoints, a live leaderboard, and a disappearing platform challenge.

What You'll Build

A 5-stage obby game on Roblox with server-side scripting in Luau, kill bricks that reset you, checkpoints that track your progress, and a disappearing platform obstacle.

By the end of this project, you'll have:

  • A 5-stage obby course with increasing difficulty and color-coded platforms.
  • A server-side checkpoint script with a stage-tracking leaderboard built in Luau.
  • Kill bricks and a disappearing platform that make the game challenging and replayable.
  • A published, live game on Roblox that anyone can find and play.
  • Secret Mission: Add a timed speed-run leaderboard that tracks each player's fastest completion time.

Are there any prerequisites?

None. This guide walks you through installing Roblox Studio and creating a free Roblox account. You just need a Windows PC with at least 3 GB of RAM.

Install Roblox Studio and Create Your Project

Every Roblox game starts as a project inside Roblox Studio. Studio is your all-in-one workspace for building worlds, scripting gameplay, and testing everything before players see it.

In this step, you will create your first project from a template and configure the panels you will use throughout the rest of this build.

In this step, get ready to:
  • Create a new Baseplate project in Roblox Studio.
  • Save it to Roblox as a private game.
  • Set up your Explorer, Properties, and Output panels.
Confirm Roblox Studio is ready

You should already be signed into Roblox Studio. You will see the Studio home screen with template options available.

Not seeing the home screen?

If Roblox Studio is not installed yet, go to https://create.roblox.com and click Download Studio. Run the downloaded RobloxStudio.exe file, then launch Studio and sign in with your Roblox account.

If you do not have an account, create a free one at roblox.com first.

Help me troubleshoot Roblox Studio installation

Create a new Baseplate project

The Baseplate template gives you an empty flat world with a spawn point. This is the perfect blank canvas for building an obby from scratch.

  • On the Studio home screen, click New and select the Baseplate template.
  • Studio opens a new experience with a flat gray floor and a spawn pad.

What is the Baseplate template?

The Baseplate template includes only two default objects: a flat floor (the Baseplate) and a SpawnLocation where players appear when they join. It is the simplest starting point for any custom game.

Now save your project to Roblox so your work is stored in the cloud.

  • Click File in the top-left menu bar.
  • Select Save to Roblox As.
  • In the name field, type My First Obby.
  • Set the privacy to Private.
  • Click Create.

Why save as Private?

Setting your game to Private means only you can access it while you build. You will switch it to Public in the final step when the game is ready for players.

Publish button grayed out?

Make sure you are signed into a Roblox account. If the save dialog does not appear, try closing and reopening Studio, then sign in again.

Help me fix the Save to Roblox option

Set up your workspace panels

Three panels give you everything you need to build, inspect, and debug your game. Explorer, Properties, and Output should be visible by default.

  • Look for the Explorer panel (usually on the right side). It shows every object in your game as a tree.
  • Look for the Properties panel (usually below or beside Explorer). It lets you edit the selected object's settings.
  • Look for the Output panel (usually at the bottom). It shows error messages from your scripts.
  • If any panel is missing, click the View tab at the top of Studio and check the name of the missing panel to enable it.

What do these panels do?

  • Explorer shows a hierarchical list of every object and service in your game. You will use it to find parts, scripts, and folders.
  • Properties displays the settings (size, position, color, name) of whatever object you have selected. Click any object and its properties appear here.
  • Output displays runtime errors and messages from your scripts. When something breaks, this is the first place to check.

You should now see a flat gray baseplate in the 3D viewport, with the Explorer, Properties, and Output panels visible around it.

Your workspace is ready. Next up, you will build the platforms and checkpoints that form your obby course.

Build Your Obby Stages

Your project is set up and saved in Roblox Studio. Now it's time to build the actual obstacle course your players will jump through.

An obby is all about the platforms. You'll create a starting area, then build stages of increasing difficulty. Each stage gets its own color and checkpoint so players always know how far they've made it.

In this step, get ready to:
  • Delete the default baseplate and create a spawn platform.
  • Build 5 stages of platforms with increasing difficulty.
  • Add checkpoint parts that track player progress.
Delete the baseplate and create your starting platform

Removing the baseplate forces players to stay on your platforms. If they miss a jump, they fall into the void and reset. This creates the core "try, fail, retry" loop that makes obbies addictive.

  • In the Explorer panel, find Baseplate listed under Workspace.
  • Right-click Baseplate and select Delete.

The 3D viewport should now show an empty sky with no ground. Next, you'll create the green platform where players spawn.

  • Click the Model tab at the top of the screen.
  • Click Part to insert a new block into your workspace.
  • In Explorer, click on the new Part to select it.
  • In the Properties panel, find the Name field at the top and change it to SpawnPlatform.
  • Set Size to 20, 1, 20.
  • Set Position to 0, 0, 0.
  • Set Color to a bright green (click the color swatch in Properties to open the color picker).
  • Check the Anchored checkbox to set it to true.

Why does Anchored matter?

Setting Anchored to true locks a Part in place. Without it, your platform falls into the void the moment the game starts. Every platform you build in this project must be anchored.

  • In Explorer, find SpawnLocation under Workspace.
  • Click SpawnLocation to select it, then select the Move tool in the toolbar at the top.
  • Drag the colored arrows to position SpawnLocation on top of your SpawnPlatform so players start there.

You should see a bright green platform in the viewport with the checkered spawn pad sitting on top of it.

Platform not visible in the viewport?

  • Check that Position is set to 0, 0, 0. If the part is far from the camera, press F to focus on the selected part.
  • Make sure you selected the new Part (not SpawnLocation) before editing Properties.

Help me find my SpawnPlatform in the viewport.

Build 5 stages of platforms

Each stage of your obby needs to be progressively harder. You'll use different gap sizes, heights, and platform widths to ramp up the difficulty across 5 stages.

  • Switch to the Model tab and click Part to insert a new block.
  • Select the new Part, then click the Move tool in the toolbar to position it.
  • Drag the colored axis arrows to place the platform a short jump away from your SpawnPlatform.
  • Use the Scale tool in the toolbar to resize platforms as needed (drag the handles that appear on each face).

How should I name my platforms?

Name each platform by its stage and position in the Properties panel. For example: Stage1_Platform1, Stage1_Platform2, Stage2_Platform1. This keeps your Explorer organized as your game grows.

Follow this layout guide for each stage:

  • Stage 1: Easy jumps with 4-6 stud gaps between platforms. Color them bright blue.
  • Stage 2: Wider gaps of 7-8 studs. Color them orange.
  • Stage 3: Platforms at different heights to add vertical challenge. Color them purple.
  • Stage 4: Narrow platforms (set Size to 4, 1, 4). Color them pink.
  • Stage 5: Combination of height changes and narrow platforms. Color them red.

How far can players jump?

Roblox characters can jump approximately 7 studs horizontally and 7 studs vertically by default. Keep Stage 1 gaps well under this limit, and push closer to it in later stages.

  • Set Anchored to true on EVERY platform you create.
  • Continue inserting Parts (Model tab, then Part) until you have a full path from Stage 1 to Stage 5.
  • Press Play at the top of the screen to test your layout. Make sure every jump is possible.
  • Press Esc and click Leave to return to editing mode when you're done testing.

Platforms falling when you press Play?

Select each platform in Explorer, check the Properties panel, and make sure Anchored is checked. Unanchored parts fall due to gravity the moment the game starts.

Help me fix my falling platforms.

Add checkpoint parts

Checkpoints let the script you'll write in the next step know which stage a player has reached. Each checkpoint is a Part named with a simple number.

  • In the Model tab, click Part to insert a new block.
  • In Properties, rename it to 1.
  • Set Size to 6, 1, 6.
  • Set Color to bright yellow.
  • Set Anchored to true.
  • Use the Move tool to place it at the beginning of Stage 1.
  • Repeat this process 4 more times, creating Parts named 2, 3, 4, and 5.
  • Give each one the same properties: Size 6, 1, 6, bright yellow Color, and Anchored true.
  • Place each checkpoint at the start of its corresponding stage.

Now organize them into a folder:

  • In Explorer, right-click Workspace and select Insert Object.
  • Choose Folder from the list.
  • Rename the new Folder to Checkpoints.
  • Drag all 5 checkpoint parts (1, 2, 3, 4, 5) into the Checkpoints folder in Explorer.

Why simple number names?

The checkpoint script you'll write next uses tonumber(checkpoint.Name) to match each part against the player's current stage value. Naming them "1" through "5" keeps the logic clean and simple.

  • Expand the Checkpoints folder in Explorer. Confirm you see 5 parts named 1 through 5.
  • Press Play to test. Jump between your platforms and confirm you can reach all 5 stages. You should see yellow checkpoint pads at the start of each stage.
  • Press Esc and click Leave to return to editing mode.

Don't see the Checkpoints folder?

Make sure you created the Folder inside Workspace (not ServerScriptService or another location). Right-click directly on Workspace in Explorer to insert it.

Help me organize my checkpoints into a folder.

Your obstacle course is built and ready for action. Next up, you'll write your first Luau script to bring those checkpoints to life with a working leaderboard.

Script Checkpoints and the Leaderboard

Your obby has platforms, checkpoints, and a clear path from Stage 1 to Stage 5. But right now, falling just means respawning at the very beginning. There is no progress tracking.

In this step, you will write a Luau script that gives your game a live leaderboard and a checkpoint system. Players will see their current stage on screen, respawn at their last checkpoint instead of the start, and advance to the next stage each time they reach a new checkpoint.

In this step, get ready to:
  • Create a server script that sets up a leaderboard for every player who joins.
  • Wire up checkpoint detection so players advance stages.
  • Test the full system in Play mode.
Create the checkpoint and leaderboard script

Server scripts live in ServerScriptService so they run on the server, not on each player's device. This keeps your game logic secure and prevents cheating.

  • In the Explorer panel, hover over ServerScriptService to reveal the + button.
  • Click + and select Script.
  • A new script opens in the Script Editor with default code.
  • Right-click the new script in Explorer and select Rename. Name it CheckpointSystem.
  • Select all of the default code in the Script Editor and delete it.
  • Paste the following code into the empty script:
local Players = game:GetService("Players")
local checkpoints = workspace.Checkpoints

Players.PlayerAdded:Connect(function(player)
	-- Create the leaderboard folder for this player
	local leaderstats = Instance.new("Folder")
	leaderstats.Name = "leaderstats"
	leaderstats.Parent = player

	-- Create a Stage value that starts at 1
	local stage = Instance.new("IntValue")
	stage.Name = "Stage"
	stage.Value = 1
	stage.Parent = leaderstats

	-- When the player respawns, teleport them to their last checkpoint
	player.CharacterAdded:Connect(function(character)
		task.wait()
		if stage.Value > 1 then
			local checkpoint = checkpoints:FindFirstChild(tostring(stage.Value - 1))
			if checkpoint then
				character:MoveTo(checkpoint.Position + Vector3.new(0, 3, 0))
			end
		end
	end)
end)

-- Listen for players touching each checkpoint part
for _, checkpoint in pairs(checkpoints:GetChildren()) do
	checkpoint.Touched:Connect(function(hit)
		if hit.Parent:FindFirstChild("Humanoid") then
			local character = hit.Parent
			local player = Players:GetPlayerFromCharacter(character)
			if player then
				local stage = player.leaderstats.Stage
				-- Only advance if this is the NEXT checkpoint
				if tonumber(checkpoint.Name) == stage.Value then
					stage.Value += 1
				end
			end
		end
	end)
end

What does this script do?

This script handles three jobs:

  • Leaderboard setup: When a player joins, it creates a leaderstats folder with a Stage value starting at 1. Roblox automatically displays anything inside leaderstats on the in-game leaderboard.
  • Respawn teleport: When a player dies and respawns, CharacterAdded fires. The script checks their stage and teleports them to their last checkpoint instead of the spawn point.
  • Checkpoint detection: Each checkpoint part listens for Touched events. When a player touches the checkpoint matching their current stage number, their stage advances by 1.

Why does the script only advance on the NEXT checkpoint?

The line if tonumber(checkpoint.Name) == stage.Value then ensures players cannot skip ahead. If you are on Stage 2, only touching checkpoint 2 advances you to Stage 3. Running ahead to checkpoint 4 does nothing until you pass 2 and 3 first.

Understand how the key pieces work

Before testing, here is a quick breakdown of the Roblox-specific patterns in this script.

What is leaderstats?

leaderstats is a special folder name that Roblox recognizes automatically. If a Folder named exactly leaderstats (all lowercase) is parented to a player, Roblox displays its children as columns on the in-game leaderboard. It must be spelled exactly this way.

What are Instance.new() and IntValue?

Instance.new("Folder") creates a new Folder object in memory. Instance.new("IntValue") creates a container that holds a single integer. You set its Name, Value, and Parent properties to wire it into the game hierarchy.

Why task.wait() before teleporting?

task.wait() pauses execution for one frame so the character fully loads before the script tries to move it. Without this pause, the teleport can silently fail because the character's body parts have not spawned yet.

How does Touched detect a player?

The Touched event fires whenever any body part hits the checkpoint. The script checks hit.Parent:FindFirstChild("Humanoid") to confirm it was a player character (not a random falling part). Then Players:GetPlayerFromCharacter(character) retrieves the actual player object so the script can update their stage.

Test the checkpoint system
  • Press the Play button in the toolbar at the top of Roblox Studio.
  • Look at the leaderboard in the top-right corner of the game view. You should see your player name with Stage: 1 next to it.
  • Walk your character to checkpoint 1 (the first yellow platform at the start of Stage 1).
  • The leaderboard should update to Stage: 2 the moment you touch it.
  • Press Esc, then click Reset Character to simulate dying.
  • After respawning, you should appear at checkpoint 1 instead of the original spawn point.
  • Press the Stop button in the toolbar when you are done testing.

Leaderboard not showing or checkpoint not advancing?

  • Check the Output panel for red error text. A common issue is the Checkpoints folder not being in Workspace or being misspelled.
  • Make sure each checkpoint Part inside the Checkpoints folder is named with a simple number (1, 2, 3, etc.) with no spaces or extra characters.
  • Confirm that the script is inside ServerScriptService, not inside Workspace or StarterPlayerScripts.
  • If the respawn teleport does not work, make sure the checkpoint parts are not buried inside the platform. The player's feet need to physically touch them.

Help me debug my CheckpointSystem script. The leaderboard is not showing or checkpoints are not advancing my stage.

✔️ Awesome, I've got everything!

Great. Double check you have saved your project (File > Save to Roblox) before moving on.

ⓧ I'd like to double check the full code

Here is the complete CheckpointSystem script. Make sure your code matches this exactly:

local Players = game:GetService("Players")
local checkpoints = workspace.Checkpoints

Players.PlayerAdded:Connect(function(player)
	local leaderstats = Instance.new("Folder")
	leaderstats.Name = "leaderstats"
	leaderstats.Parent = player

	local stage = Instance.new("IntValue")
	stage.Name = "Stage"
	stage.Value = 1
	stage.Parent = leaderstats

	player.CharacterAdded:Connect(function(character)
		task.wait()
		if stage.Value > 1 then
			local checkpoint = checkpoints:FindFirstChild(tostring(stage.Value - 1))
			if checkpoint then
				character:MoveTo(checkpoint.Position + Vector3.new(0, 3, 0))
			end
		end
	end)
end)

for _, checkpoint in pairs(checkpoints:GetChildren()) do
	checkpoint.Touched:Connect(function(hit)
		if hit.Parent:FindFirstChild("Humanoid") then
			local character = hit.Parent
			local player = Players:GetPlayerFromCharacter(character)
			if player then
				local stage = player.leaderstats.Stage
				if tonumber(checkpoint.Name) == stage.Value then
					stage.Value += 1
				end
			end
		end
	end)
end

Your obby now tracks progress and respawns players at the right spot. Next up, you will add kill bricks and a disappearing platform to make your course actually dangerous.

Add Kill Bricks and a Disappearing Platform

Your obby has a path and a checkpoint system, but right now there is no real consequence for missing a jump. Players just land in the void and respawn. To make the game feel rewarding, you need to add hazards that punish missteps and obstacles that demand timing.

In this step, you will create kill bricks that instantly reset the player on contact. You will also build a disappearing platform that forces players to time their jumps perfectly.

In this step, get ready to:
  • Create kill bricks that reset the player on contact.
  • Build a disappearing platform that cycles between visible and invisible.
  • Test that all hazards work correctly with your checkpoint system.
Create kill bricks

Kill bricks are red strips placed between platforms. When a player touches one, their health drops to zero and they respawn at their last checkpoint.

  • In Roblox Studio, go to the Model tab and click Part to insert a new block.
  • Select the new Part. In the Properties panel, set Name to KillBrick.
  • Set Size to 10, 1, 2 (a thin red strip).
  • Set Color to bright red.
  • Set Anchored to true.
  • Use the Move tool (select the Part, press W) to place the kill brick between two platforms in Stage 2.

Now you need a script inside the kill brick that detects when a player touches it.

  • In Explorer, hover over KillBrick and click the + button.
  • Select Script.
  • Rename the new Script to KillScript.
  • Delete the default code and paste the following:
local killBrick = script.Parent

killBrick.Touched:Connect(function(hit)
	local humanoid = hit.Parent:FindFirstChild("Humanoid")
	if humanoid then
		humanoid.Health = 0
	end
end)

What does this code do?

  • script.Parent references the Part this script lives inside (the kill brick).
  • The Touched event fires whenever any object collides with the kill brick, including a player's body parts.
  • FindFirstChild("Humanoid") checks if the touching object belongs to a player character. Every player character has a Humanoid.
  • Setting humanoid.Health = 0 kills the player, triggering a respawn at their last checkpoint.
  • Now duplicate the kill brick to add more hazards. Select the KillBrick in Explorer and press Ctrl+D to duplicate it.
  • Use the Move tool to place copies between platforms in Stages 3, 4, and 5.
  • Place kill bricks where a missed jump would land the player, making falls punishing.

Make kill bricks visible but avoidable

Position kill bricks slightly below or between platforms so players can see the danger. The bright red color signals "do not touch" without needing a label.

Create a disappearing platform

A disappearing platform adds a timing challenge. The platform cycles between solid and invisible every 3 seconds, so players must watch the pattern and jump at the right moment.

  • Go to the Model tab and click Part to insert a new block.
  • In Properties, set Name to DisappearingPlatform.
  • Set Color to light blue.
  • Set Size to 6, 1, 6.
  • Set Anchored to true.
  • Place it in Stage 4 or 5 as the only way across a gap. Players must use this platform to continue.

Now add the script that controls the disappearing behavior.

  • In Explorer, hover over DisappearingPlatform and click the + button.
  • Select Script.
  • Rename the new Script to Disappear.
  • Delete the default code and paste the following:
local platform = script.Parent

local function disappear()
	platform.CanCollide = false
	platform.Transparency = 1
end

local function appear()
	platform.CanCollide = true
	platform.Transparency = 0
end

while true do
	task.wait(3)
	disappear()
	task.wait(3)
	appear()
end

What does this code do?

  • script.Parent grabs the platform Part that this script lives inside.
  • The disappear() function sets CanCollide to false (players fall through) and Transparency to 1 (fully invisible).
  • The appear() function reverses both properties, making the platform solid and visible again.
  • The while true do loop runs forever, alternating between visible and invisible every 3 seconds using task.wait(3).

Adjust the timing

If 3 seconds feels too fast or too slow during testing, change the number inside task.wait(3) to a different value. Try 2 for harder or 4 for easier.

✔️ Awesome, I've got everything!

Great. Make sure you have saved both scripts before moving on to testing.

ⓧ I'd like to double check the full code

Here is the full KillScript code:

local killBrick = script.Parent

killBrick.Touched:Connect(function(hit)
	local humanoid = hit.Parent:FindFirstChild("Humanoid")
	if humanoid then
		humanoid.Health = 0
	end
end)

Here is the full Disappear script code:

local platform = script.Parent

local function disappear()
	platform.CanCollide = false
	platform.Transparency = 1
end

local function appear()
	platform.CanCollide = true
	platform.Transparency = 0
end

while true do
	task.wait(3)
	disappear()
	task.wait(3)
	appear()
end
Test your hazards

Time to verify that kill bricks and the disappearing platform work correctly alongside your checkpoint system.

  • Press Play at the top of Roblox Studio to start testing.
  • Walk your character into a red kill brick. You should die instantly and respawn at your last checkpoint.
  • Navigate to the disappearing platform. Watch it cycle between visible and invisible every 3 seconds.
  • Jump onto the platform while it is visible. Wait for it to vanish beneath you. You should fall and respawn at your last checkpoint.
  • Confirm your Stage leaderboard value still updates correctly when touching checkpoints after dying.

Kill brick not working?

  • Make sure the KillScript is a child of the KillBrick Part, not a sibling next to it. In Explorer, the script should appear nested under the Part.
  • Check the Output panel for red error text. A common mistake is misspelling Humanoid in the script.
  • Verify the kill brick is positioned where the player can actually touch it. If it is floating too high or buried in the floor, contact will not register.

My kill brick script is not detecting player touches. Help me debug.

Disappearing platform not cycling?

  • Confirm the Disappear script is nested inside the DisappearingPlatform Part in Explorer.
  • Check that you deleted the default code before pasting. Leftover code above your script can cause errors.
  • Look in the Output panel for errors. A typo in CanCollide or Transparency (both are case-sensitive) will break the script.

My disappearing platform script is not making the platform disappear. Help me troubleshoot.

Your obby now has real consequences. Kill bricks punish sloppy jumps, and the disappearing platform demands timing. Next up, you will publish this game live on Roblox so your friends can play it.

Publish Your Game to Roblox

Your obby is complete with hazards, checkpoints, and a working leaderboard. Now it is time to ship it.

Publishing makes your game available to every player on Roblox. In this step you will do a final playthrough, publish the game, and share the link so friends can jump in.

In this step, get ready to:
  • Do a final playthrough of your obby from Stage 1 to Stage 5.
  • Publish your game to Roblox and set it to Public.
  • Share your game URL so friends can play it.
Do a final playthrough

Before publishing, you want to make sure every jump is reachable and every script still works together.

  • Click the Start button (to the right of the Play button in the top toolbar). This simulates a real server and catches network-related bugs that Play mode might miss.
  • Play through the entire obby from Stage 1 to Stage 5. Make sure every gap is jumpable and no platform is too far away.
  • Confirm the leaderboard updates at each checkpoint and that kill bricks reset you correctly.
  • Watch the disappearing platform cycle. Make sure you can time a jump across the gap.
  • When finished testing, click the Stop button to return to editing mode.

Why use Start mode instead of Play?

Start mode creates a full server-client simulation, just like a live Roblox game. Play mode is a quick single-player test. Since your checkpoint system uses server-side scripts, Start mode is the most accurate way to verify everything works before publishing.

  • Select all of your platforms in Explorer (click the first, hold Shift, click the last). In the Properties panel, confirm that Anchored is checked (true) for every platform.

A platform is falling when you hit Play?

This means Anchored is not set to true on that part. Select the falling part in Explorer, go to Properties, and check the Anchored box.

help me fix a platform that keeps falling in my obby

Publish your game to Roblox

Publishing uploads your game to the Roblox cloud and makes it playable outside of Studio. You already saved it in Step 1. Now you will publish and set it live.

  • Click File in the top-left corner of Roblox Studio.
  • Click Publish to Roblox.
  • In the Publish Experience window, fill in these fields:
  • Set Name to My First Obby.
  • Write a short Description, for example: A 5-stage obstacle course with checkpoints, kill bricks, and a disappearing platform. Can you reach the end?
  • Leave Creator and Devices at their default values.
  • Click Create (or Overwrite if you see your existing saved game) to upload.

What does publishing do?

Publishing stores your game in the Roblox cloud and connects it to your account. Anyone with the link can play it once you set it to Public. Saving (which you did in Step 1) keeps a private working copy. Publishing makes it live.

  • Now set the game to Public. Click File again, then click Experience Settings.
  • In the left sidebar, click the Permissions tab.
  • Set Playability to Public.
  • Click Save.

Your game is now discoverable and playable by everyone on Roblox.

  • While still in Experience Settings, click the Security tab in the left sidebar.
  • Enable Enable Studio Access to API Services by toggling it on.
  • Click Save.

Why enable API services?

This setting lets Studio access Roblox API services like DataStores during testing. You do not need it right now, but if you later add features that save player data (like the Secret Mission timer), this setting must be on for Studio testing to work.

Publish failing or stuck?

Make sure you are signed in to Roblox Studio (check the top-right corner for your avatar). If publishing hangs, close Studio, reopen your project, and try again.

help me troubleshoot why my Roblox game won't publish

Share and play your game

Your game is live. Time to experience it as a real player would and grab the link to share.

  • In Roblox Studio, click File, then Experience Settings.
  • Click the Basic Info tab. At the top of the page, look for the link to your game's Roblox page. Click it to open the page in your browser.
  • Copy the URL from your browser's address bar. This is the link you share with friends so they can play your obby.
  • On that same page, click the green Play button to join the game yourself from the Roblox website (not Studio). This lets you experience it as a real player would.

Find your game anytime

You can always find your published game by going to your Roblox profile and clicking the Creations tab. Your obby will be listed there.

Friends say they can't find the game?

Double-check that Playability is set to Public in Experience Settings. If it is still set to Private, only you can access it. Also make sure you clicked Save after changing the setting.

help me figure out why friends can't join my published Roblox game

Your obby is live. Anyone with the link can now jump, fall, retry, and race through your creation. Next up, a Secret Mission to add a speed-run timer that tracks each player's fastest completion.

Secret mission

Add a Speed-Run Timer Leaderboard

Your obby tracks stages, but what about speed? Real obbies have speed-run leaderboards that show each player's fastest completion time. Can you add a timer that starts when a player spawns and records their best time when they reach the final stage?

Clean Up Your Resources

Clean Up Your Resources

Decide whether to keep your resources running, pause them to come back later, or delete them entirely. This project runs entirely on Roblox's free platform, so there are no ongoing costs.

Resources you used:

  • "My First Obby" game published on Roblox.
  • Roblox Studio installed on your computer.
  • Roblox account.

Keep everything running

No action needed. Choose this if you are still actively building or want friends to keep playing your obby.

  • Your game stays live and playable at its Roblox URL.
  • Roblox Studio remains installed for future projects.
  • Your Roblox account stays active.
  • There are no charges for any of these resources.

Pause - I'll come back to this later

Hide your game from the public so no one can find or play it, but keep everything intact for when you return.

  • Open Roblox Studio and open your "My First Obby" project.
  • Click File in the top menu bar.
  • Select Game Settings.
  • Select the Permissions tab in the left sidebar.
  • Change the game from Public to Private.
  • Click Save.

Your game is now invisible to other players. You can set it back to Public any time you want to resume.

Delete - I don't want to use this again

Remove all project resources and start fresh.

  • Set your game to Private by following the Pause steps above. This removes it from public access.
  • To uninstall Roblox Studio on Windows, press the Windows key and open Settings.
  • Select Apps, then Apps & features.
  • Find Roblox Studio in the list, click it, and select Uninstall.
  • To deactivate your Roblox account, go to your Roblox privacy settings on roblox.com.
  • Select the Deactivate option under Account Deactivation and Deletion. You can reactivate at any time by logging back in.

That's a Wrap!

That's a Wrap!

Nice work! You just built and published a complete Roblox obby game from scratch.

You've learned how to:

  • Build a 5-stage obstacle course with colored platforms, increasing difficulty, and hazards like kill bricks and a disappearing platform.
  • Write Luau scripts that create a live leaderboard, track player checkpoints, and respawn players at the correct stage.
  • Publish a game to Roblox so anyone in the world can find it and play it.
  • Secret Mission: Add a speed-run timer that tracks each player's fastest completion time on the leaderboard.

Ready to quiz yourself?