Say you're falling with a jetpack, you activate it but it only slows your fall at first because the speed is stronger than the force of the jetpack. But eventually, the speed slows down enough that the jetpack moves you up. How can you achieve such an effect in Roblox if I'm trying to create a jetpack? I'm trying bodyvelocity with a flyscript, but I haven't figured out a way to do it.
My current code:
-- Services local input = game:GetService("UserInputService") -- Gets input from player's keyboard local rs = game:GetService("RunService") -- Handles the runtime of the game local camera = game.Workspace.CurrentCamera -- Player local player = game:GetService("Players").LocalPlayer -- Player local character -- Player's character local root -- Character's HumanoidRootPart local humanoid -- Character's Humanoid player.CharacterAdded:connect(function(Char) character = Char root = Char:WaitForChild("HumanoidRootPart") humanoid = Char:WaitForChild("Humanoid") end) -- Body Properties local bodyVel = Instance.new("BodyVelocity", script) -- Create "BodyVelocity" in rootpart bodyVel.MaxForce = Vector3.new(math.huge, math.huge, math.huge) -- Infinite potential forces bodyVel.Velocity = Vector3.new() -- No velocity / not moving -- Directional Values local xDelta = 0 -- 1/0/-1 = left/not moving/right local lastXDelta = 0 local zDelta = 0 -- 1/0/-1 = forwards/not moving/backwards local lastZDelta = 0 -- Speed Settings local maxSpeed = 200 -- Maximum total speed local currentSpeed = 0 -- Current flying speed -- Current Flying Status local flying = false -- Activate/Deactivate Flying input.InputBegan:connect(function(keyPut) local key = keyPut.KeyCode -- What key was pressed if key == Enum.KeyCode.F and flying == false then bodyVel.Parent = root bodyVel.Velocity = root.Velocity flying = true -- Activate flying elseif key == Enum.KeyCode.F and flying == true then bodyVel.Parent = script flying = false end end) -- Flying controls input.InputBegan:connect(function(keyPut) local key = keyPut.KeyCode if key == Enum.KeyCode.W then -- Forward Movement zDelta = zDelta - 1 elseif key == Enum.KeyCode.A then -- Left Movement xDelta = xDelta - 1 elseif key == Enum.KeyCode.S then -- Backwards Movement zDelta = zDelta + 1 elseif key == Enum.KeyCode.D then -- Right Movement xDelta = xDelta + 1 end end) input.InputEnded:connect(function(keyPut) local key = keyPut.KeyCode if key == Enum.KeyCode.W then zDelta = zDelta + 1 elseif key == Enum.KeyCode.A then xDelta = xDelta + 1 elseif key == Enum.KeyCode.S then zDelta = zDelta - 1 elseif key == Enum.KeyCode.D then xDelta = xDelta - 1 end end) -- Are you flying? rs.RenderStepped:connect(function() if flying then if xDelta ~= 0 or zDelta ~= 0 then lastXDelta = xDelta local direction = CFrame.new(camera.CFrame.p, (camera.CFrame * CFrame.new(xDelta, 0, zDelta)).p) if currentSpeed < (maxSpeed - 5) then currentSpeed = currentSpeed + (0.01 * maxSpeed) elseif math.floor(currentSpeed) == maxSpeed or currentSpeed > maxSpeed then currentSpeed = maxSpeed end bodyVel.Velocity = direction.LookVector * currentSpeed else if currentSpeed > 5 then bodyVel.Velocity = bodyVel.Velocity / currentSpeed currentSpeed = currentSpeed - (.02 * currentSpeed) bodyVel.Velocity = bodyVel.Velocity * currentSpeed else currentSpeed = 0 end end end end)
The closest thing I've found is emperormicah's answer in this post but I don't quite understand it