How to Make Checkpoints in Roblox Studio: Simple Respawn Script
To make a checkpoint in Roblox Studio, place a SpawnLocation where players should respawn and use a server-side script to assign that SpawnLocation to the player when their character touches it. For an obby, repeat the setup at each stage. A checkpoint can work for the current play session without a DataStore; saving progress between separate sessions is a different feature.
This tutorial covers the simple, reliable version first, then explains how to test it and why checkpoints sometimes fail. If you have not built an obby yet, follow our beginner Roblox game-building guide to create a playable level.
How a Roblox checkpoint works
A SpawnLocation is a Roblox object that can be used as a character’s spawn point. The Player.RespawnLocation property can point to a specific SpawnLocation. When a player touches your checkpoint, a server script identifies the character’s player and updates that property. If the character dies later in the same session, the new spawn location is used.
This is not the same as saving progress to persistent storage. If the player leaves and rejoins, the last touched checkpoint will not automatically be restored without additional saving and loading logic.
Step 1: Add a SpawnLocation checkpoint
- Open your place in Roblox Studio.
- In the Explorer window, find Workspace.
- Insert a SpawnLocation object and position it on a safe, reachable platform.
- Rename it something descriptive, such as Checkpoint02.
- Set Neutral to true if you are not using team-based spawns, and ensure the SpawnLocation is enabled.
- Choose a visible color or surrounding platform design so players recognize it as a checkpoint.
Use a separate normal starting spawn for new players. Put checkpoint spawns farther along the course so the player must reach them legitimately.
Step 2: Add a server script to the checkpoint
Insert a regular Script inside the Checkpoint02 SpawnLocation. Do not use a LocalScript for this simple implementation: the server should decide which respawn point the player has earned.
local Players = game:GetService("Players")
local checkpoint = script.Parent
checkpoint.Touched:Connect(function(hit)
local character = hit.Parent
if not character then
return
end
local humanoid = character:FindFirstChildOfClass("Humanoid")
if not humanoid then
return
end
local player = Players:GetPlayerFromCharacter(character)
if player then
player.RespawnLocation = checkpoint
end
end)What the code does: The Touched event fires when something contacts the checkpoint. The script checks whether the touching part belongs to a character with a Humanoid, finds the corresponding player, and assigns that checkpoint as the player’s respawn location.
Note that Roblox touch events can fire repeatedly for different body parts. This assignment is safe to repeat, but more advanced checkpoint systems may add debouncing, stage numbers, and server-side progression checks.
Step 3: Duplicate checkpoints across your obby
Duplicate the configured SpawnLocation and its Script for each later stage. Rename the objects so you can identify them in Explorer. Place each one on a solid platform rather than above a hazard or inside another part.

Important limitation: This simple script lets a player reactivate an earlier checkpoint and move their respawn location backward. That may be acceptable for a basic obby, but a progression system should track a player’s highest completed stage on the server and ignore older checkpoints.
Step 4: Test the checkpoint before publishing
- Start a Roblox Studio playtest with F5.
- Move your character to Checkpoint02 and touch its SpawnLocation.
- Walk to a hazard that defeats the character, or use a controlled reset.
- Confirm the character respawns at Checkpoint02 rather than at the beginning.
- Try the test again without touching the checkpoint; the player should use the original spawn.
- Stop and start a new session to confirm you understand that the simple setup does not save checkpoint progress between sessions.
For multiplayer games, also test with two simulated players. One player touching a checkpoint should not move the other player’s respawn point. Our Roblox Studio multiplayer testing guide explains how to compare server and client behavior.
Why a Roblox checkpoint might not work
The player keeps respawning at the starting point
Check that the checkpoint is a SpawnLocation, that it is enabled, and that the script is a server Script rather than a LocalScript. Make sure the character actually touches the checkpoint and inspect the Output window for errors.
The script fires, but the player never gets assigned
The touched object might not be a direct part of the player’s character. For example, an accessory handle or another physical object can trigger Touched. Test by stepping onto the actual SpawnLocation with the character’s body. More complex games may need to walk up the parent hierarchy to identify a character reliably.
Players sometimes appear in the wrong place
Check for competing spawn rules, team restrictions, and other scripts that modify RespawnLocation. A neutral SpawnLocation avoids many team-based conflicts for simple obbies.
Checkpoints reset when the player leaves
That is expected with the example above. It stores the respawn point in the current player session only. Persistent progress requires a server-side DataStore design, validation, error handling, and testing of the save/load lifecycle. See our DataStore troubleshooting guide before adding persistence.
Security and design tips
- Keep progression authoritative on the server. Do not trust a client to tell the server that a distant checkpoint was earned.
- Make checkpoints obvious. A recognizable platform, sign, or sound reduces player confusion.
- Place spawns safely. Leave enough space for the character to stand without touching hazards.
- Test out of order. Confirm your game does not accidentally let players skip required stages.
- Separate respawning from persistence. Get same-session checkpoints working before attempting cross-session saves.
Frequently asked questions
Do Roblox checkpoints need a script?
For a custom touch-to-activate checkpoint system using RespawnLocation, a small server Script is a straightforward approach. More advanced games can manage checkpoints centrally instead of putting a script in each object.
Does a checkpoint save when you leave Roblox?
Not with this basic example. RespawnLocation affects the current player session. Persistent stage saving requires additional server-side data storage.
Can two players use different checkpoints?
Yes. Each Player has their own RespawnLocation property, so one player’s checkpoint assignment does not have to change another player’s.
Should I use a Part or a SpawnLocation?
A regular Part can detect touches, but RespawnLocation expects a SpawnLocation. The simplest tutorial uses the SpawnLocation as both the touch target and the respawn point.
Documentation: Roblox Creator Hub: Player.RespawnLocation and SpawnLocation class reference. This is a code walkthrough; the example has not been verified through a live Studio playtest.