I want to make it to where players on mobile can simply tap their jump button twice to double jump, but I don't know how to do that.
wait(2) local Players = game:GetService("Players") local UserInputService = game:GetService("UserInputService") local Player = Players.LocalPlayer local Character = Player.Character or Player.CharacterAdded:Wait() local Humanoid = Character:FindFirstChildOfClass('Humanoid') local Root = Character.PrimaryPart local root = Character.HumanoidRootPart local yaxis = 0 local o = 0 local Db = true local CanDouble = true local LatestPart = nil local mouse = Player:GetMouse() local wallJumpTopAnimTrack = Humanoid:LoadAnimation(script.WallJumpTopAnim) local wallJumpAnimTrack = Humanoid:LoadAnimation(script.WallJumpAnim) local doubleJumpAnimTrack = Humanoid:LoadAnimation(script.DoubleJump) local landAnimTrack = Humanoid:LoadAnimation(script.LandAnim) landAnimTrack.Priority = Enum.AnimationPriority.Action local doublecd = true local FallEffect = false UserInputService.InputBegan:Connect(function(input, gameProcessed) if not gameProcessed and input.KeyCode == Enum.KeyCode.Space and Humanoid:GetState() == Enum.HumanoidStateType.Freefall and Db then local ray = Ray.new(Root.Position, Root.CFrame.lookVector*2.5) local hit = game.Workspace:FindPartOnRay(ray, Character) if hit then if hit:IsA("BasePart") and hit.CanCollide == true then spawn(function() Db = false wait(0) Db = true end) if (hit.Position.Y + (hit.Size.Y / 2)) - Root.Position.Y <= 10 then wallJumpTopAnimTrack:Play() Character.Humanoid.AutoRotate = false Root.Anchored = true wait(0.2) FallEffect = true Root.Anchored = false Character.Humanoid.AutoRotate = true Root.Velocity = Vector3.new(0,75,0) -- was 0,75,0 return end if LatestPart ~= hit then wallJumpAnimTrack:Play() Character.Humanoid.AutoRotate = true Root.Anchored = true wait(0.15) -- was .15 script.Remotes.Walljump:FireServer() Root.Anchored = false FallEffect = true Character.Humanoid.AutoRotate = true --was 45 v --65 Root.Velocity = Root.CFrame.lookVector * -57 + Vector3.new(0,113,0) end end else if Humanoid.Health < 35 then return end if not CanDouble then return end if not doublecd then return end doublecd = false spawn(function() wait(0) doublecd = true end) CanDouble = false Root.Velocity = Vector3.new(0,65,0) doubleJumpAnimTrack:Play() FallEffect = true spawn(function() doubleJumpAnimTrack.Stopped:Wait() if Db == false then Db = true landAnimTrack:Play() end end) end end end) mouse.KeyDown:connect(function(key) if key == " " then spawn(function() repeat wait() until Humanoid.FloorMaterial ~= Enum.Material.Air LatestPart = nil CanDouble = true end) end end) repeat wait() until Character function fallcheck() if root.Position.Y > 40 then --game.ReplicatedStorage.Events.FallDamage:FireServer(o) end o = root.Position.Y end Humanoid.StateChanged:connect(function(Oldstate, Newstate) if Newstate == Enum.HumanoidStateType.Landed then local NewYAxis = root.Position.Y --print(yaxis - NewYAxis) if FallEffect == true or yaxis - NewYAxis >= 10 then Humanoid.WalkSpeed = 0 Humanoid.JumpPower = 0 fallcheck() local a = Humanoid:LoadAnimation(script.LandAnim) a:Play(0.15, 1, 1) local Effect = game.ReplicatedStorage.FallPart:Clone() local Sound = game.ReplicatedStorage.Sounds.Land:Clone() Effect.Parent = workspace Effect.CFrame = root.CFrame * CFrame.new(0,-2.5,0) Effect.Smoke:Emit(50) Sound.Parent = workspace Sound:Play() game.Debris:AddItem(Sound, 4) game.Debris:AddItem(Effect, 4) wait(.05) Effect.Smoke.Enabled = false wait(.2) Humanoid.JumpPower = 50 Humanoid.WalkSpeed = 16 FallEffect = false end end if Newstate == Enum.HumanoidStateType.Freefall then yaxis = root.Position.Y end end)
Instead of using mouse.KeyDown, use ContextActionService:BindAction() with Enum.PlayerActions.CharacterJump.
local CAS = game:GetService("ContextActionService") CAS:BindAction("WallJump", function (name, state, input) if Humanoid:GetState() == Enum.HumanoidStateType.Freefall and Db then local ray = Ray.new(Root.Position, Root.CFrame.lookVector*2.5) local hit = game.Workspace:FindPartOnRay(ray, Character) if hit then if hit:IsA("BasePart") and hit.CanCollide == true then spawn(function() Db = false wait(0) Db = true end) if (hit.Position.Y + (hit.Size.Y / 2)) - Root.Position.Y <= 10 then wallJumpTopAnimTrack:Play() Character.Humanoid.AutoRotate = false Root.Anchored = true wait(0.2) FallEffect = true Root.Anchored = false Character.Humanoid.AutoRotate = true Root.Velocity = Vector3.new(0,75,0) -- was 0,75,0 return end if LatestPart ~= hit then wallJumpAnimTrack:Play() Character.Humanoid.AutoRotate = true Root.Anchored = true wait(0.15) -- was .15 script.Remotes.Walljump:FireServer() Root.Anchored = false FallEffect = true Character.Humanoid.AutoRotate = true --was 45 v --65 Root.Velocity = Root.CFrame.lookVector * -57 + Vector3.new(0,113,0) end end else if Humanoid.Health < 35 then return end if not CanDouble then return end if not doublecd then return end doublecd = false spawn(function() wait(0) doublecd = true end) CanDouble = false Root.Velocity = Vector3.new(0,65,0) doubleJumpAnimTrack:Play() FallEffect = true spawn(function() doubleJumpAnimTrack.Stopped:Wait() if Db == false then Db = true landAnimTrack:Play() end end) end end return Enum.ContextActionResult.Pass end, false, Enum.PlayerActions.CharacterJump)
This should handle all methods of jumping on all platforms. Edit: Replace the UIS.InputBegan handler with this