Stage 2: Sphere Staircase + jump pad
Make sure Stage 1 works and resetting brings you back to the red Stage 2 checkpoint.
a sphere staircase and a Stage 3 checkpoint
how a tiny script can give a player a short upward push
a jump pad that makes the obby feel like parkour
The big idea
A jump pad is simple magic: touch the pad, get pushed upward for a tiny moment. Students see the result immediately, so the code feels worth typing.
- Touched
- an event that runs when something bumps into a part
- HumanoidRootPart
- the center part Roblox uses to move a character
- velocity
- speed in a direction
Build it
Step 1 — Build the sphere staircase
Add 5 anchored Ball parts after the Stage 2 checkpoint. Make each sphere a little higher and farther than the last.
- Name them
SphereStep_1throughSphereStep_5. - Keep them big enough to land on.
- Use bright colors so the path is easy to read.
Press Play and jump across them.
Step 2 — Build the jump pad
Add one part after the spheres:
Build this partJumpPad_1
BlockOpen recipe
JumpPad_1
Block- Size
- 8 × 1 × 8
- Color
- Cyan
- Material
- Neon
- Anchored
- ✓ Yes
- Place
- After the last sphere, before a small gap
Insert a Script inside JumpPad_1:
local pad = script.Parent
local JUMP_POWER = 100
local ready = true
pad.Touched:Connect(function(touched)
if not ready then return end
local character = touched.Parent
local root = character and character:FindFirstChild("HumanoidRootPart")
if not root then return end
ready = false
local velocity = Instance.new("BodyVelocity")
velocity.MaxForce = Vector3.new(40000, 40000, 40000)
velocity.Velocity = Vector3.new(0, JUMP_POWER, 0)
velocity.Parent = root
task.wait(0.1)
velocity:Destroy()
task.wait(0.3)
ready = true
end)
Press Play. Step on the pad and watch your character blast upward. The first test should feel obvious.
Step 3 — Add the Stage 3 checkpoint
Place a new SpawnLocation where the jump pad lands. Set it to a new color, add StageNumber = 3, and create the matching Stage 3 Team.
Understand it
The pad waits for a player to touch it. Then it finds the player's HumanoidRootPart and adds a short upward push.
The BodyVelocity object is the push. It lives on the player for 0.1 seconds, then the script destroys it. The ready variable is a cooldown, so one touch does not create a pile of pushes at the same time.
The important idea is not the long Roblox word. The idea is: touch part -> change motion.
Try this
Try this
Three short experiments. Predict before you run, then test your guess.
What will happen if JUMP_POWER changes from 100 to 50?
Test JUMP_POWER at 80, 100, and 120. Which launch feels exciting but still controllable?
Where else could a touch part change how the player moves?
Test your stage
- The sphere staircase is possible.
- The jump pad launches upward.
- The landing checkpoint has
StageNumber = 3. - Resetting after touching Stage 3 brings you back there.
If it breaks
- Nothing happens on the pad. Make sure the Script is inside
JumpPad_1. - The launch is too weak. Raise
JUMP_POWER. - The launch is too wild. Lower
JUMP_POWERor move the landing closer. - The pad fires again and again. Check that
ready = false,task.wait(0.3), andready = trueare all in the script.
Do not over-explain velocity. Let students tune the number and feel the difference. The number-feel connection is the win.