Roblox jump pad script (bounce pad)
Step on the pad, fly up. One LocalScript handles every jump pad in your game, each pad can have its own power, and tilting a pad turns it into a launch pad.
LocalScriptUpdated November 9, 2026
Where to put it
LocalScript — StarterPlayer > StarterCharacterScripts > JumpPads (LocalScript). It runs on each player's device.
- Make the pad: an anchored, flat Part (a bright neon color helps players see it).
- Select the pad, open Properties → Tags and add the tag
JumpPad. Every pad with this tag works; copy it as many times as you like. - Optional: add a Number attribute named
Powerto a pad to change how high it throws (the default is 120). - Insert a LocalScript into StarterPlayer → StarterCharacterScripts and paste the code.
The script
local CollectionService = game:GetService("CollectionService")
local character = script.Parent
local humanoid = character:WaitForChild("Humanoid")
local root = character:WaitForChild("HumanoidRootPart")
local DEFAULT_POWER = 120 -- upward speed in studs per second
local COOLDOWN = 0.5
local lastLaunch = 0
local function launch(pad)
if humanoid.Health <= 0 then
return
end
local now = os.clock()
if now - lastLaunch < COOLDOWN then
return
end
lastLaunch = now
local power = pad:GetAttribute("Power") or DEFAULT_POWER
local velocity = root.AssemblyLinearVelocity
-- Keep the player's sideways speed, replace the up/down speed.
root.AssemblyLinearVelocity = Vector3.new(velocity.X, power, velocity.Z)
end
local function connectPad(pad)
if not pad:IsA("BasePart") then
return
end
pad.Touched:Connect(function(hit)
if hit:IsDescendantOf(character) then
launch(pad)
end
end)
end
for _, pad in CollectionService:GetTagged("JumpPad") do
connectPad(pad)
end
-- Pads added later (or streamed in) work too.
CollectionService:GetInstanceAddedSignal("JumpPad"):Connect(connectPad)How it works
- Each player's device moves their own character, so the launch is done in a LocalScript: it reacts instantly and never lags. A server script that sets the speed of a player's character often has no effect, because the player's device keeps overwriting it.
- Tags let one script serve every pad:
GetTaggedfinds the pads that already exist andGetInstanceAddedSignalcatches new ones, including pads that load in later with streaming turned on. - The script only replaces the vertical speed, so a running player keeps their momentum and flies forward in an arc.
- The short cooldown stops one landing from triggering the pad several times in a row.
Variations
Launch pad in any direction
Tilt the pad and launch the player along the direction its top face points. A pad tilted 45° forward throws players across a gap.
-- Replace the last two lines of launch() with:
root.AssemblyLinearVelocity = pad.CFrame.UpVector * powerSpeed pad
Tag a pad SpeedPad and give a short burst of speed instead of height. Use a second LocalScript in StarterCharacterScripts.
local CollectionService = game:GetService("CollectionService")
local character = script.Parent
local humanoid = character:WaitForChild("Humanoid")
local BOOST_SPEED = 40
local BOOST_SECONDS = 3
local normalSpeed = humanoid.WalkSpeed
local boostId = 0
local function boost()
boostId += 1
local myId = boostId
humanoid.WalkSpeed = BOOST_SPEED
task.delay(BOOST_SECONDS, function()
if boostId == myId then -- a newer boost resets the timer
humanoid.WalkSpeed = normalSpeed
end
end)
end
local function connectPad(pad)
if pad:IsA("BasePart") then
pad.Touched:Connect(function(hit)
if hit:IsDescendantOf(character) then
boost()
end
end)
end
end
for _, pad in CollectionService:GetTagged("SpeedPad") do
connectPad(pad)
end
CollectionService:GetInstanceAddedSignal("SpeedPad"):Connect(connectPad)Bounce sound and effect
Put a Sound named Boing inside the pad and play it in launch() with local sound = pad:FindFirstChild("Boing") if sound then sound:Play() end. The sound plays only for the player who jumped; play it from the server if everyone should hear it.
Common mistakes
- Setting the velocity from a server Script: the player's device owns their character's physics, so the server's change is often ignored and the pad works only sometimes.
- Using the old
BodyVelocityorBodyForce: they are deprecated. SettingAssemblyLinearVelocityonce is enough for a jump pad. - Putting the LocalScript in StarterPlayerScripts and referencing
script.Parentas the character — it isn't. StarterCharacterScripts is the folder that gets copied into each character. - A pad that is not anchored falls through the map or gets pushed around when players land on it.
- Using a jump pad to award coins or progress: anything that matters for money or ranking must be checked on the server.
FAQ
How do I make a jump pad in Roblox Studio?
Add an anchored part, give it the tag JumpPad in Properties → Tags, and put the LocalScript from this page in StarterPlayer → StarterCharacterScripts. Touching the pad sets the player's upward speed.
How do I make the jump pad higher?
Raise DEFAULT_POWER in the script, or add a Number attribute named Power to one pad to change only that pad. 120 throws a default character roughly 30–40 studs up with normal gravity.
Why does my jump pad only work sometimes?
Usually because the speed is set from a server Script while the player's device controls their character. Set it in a LocalScript, as on this page.
Does the jump pad work on mobile?
Yes. It reacts to touching the pad, not to a key, so it works the same on phones, tablets, consoles and computers.