Run it
Copy the script and paste it into your executor.
UIS = :()
RS = :()
Players = :()
player = Players.LocalPlayer
char = player.Character player.CharacterAdded:()
root = char:()
humanoid = char:()
velocityControl = .()
velocityControl.MaxForce = .(, , )
velocityControl.Velocity = .zero
velocityControl.P =
velocityControl.Name =
speed =
enabled =
inputVector = .zero
currentVelocity = .zero
lerpSpeed =
bodyFollowEnabled =
lockYEnabled =
upHeld =
downHeld =
lastLookDir = .(, , -)
ySpeed =
ySpeedMultiplier =
gui = .(, player:())
gui.Name =
gui.ResetOnSpawn =
btn = .()
btn.Text =
btn.Size = .(, , , )
btn.Position = .(, , , )
btn.BackgroundColor3 = .(, , )
btn.TextColor3 = .(, , )
btn.Parent = gui
btn.MouseButton1Click:(()
enabled = enabled
btn.Text = .. (enabled )
enabled
velocityControl.Parent = root
velocityControl.Parent =
velocityControl.Velocity = .zero
currentVelocity = .zero
upHeld =
downHeld =
)
(text, posY, isRightSide)
b = .()
b.Size = .(, , , )
isRightSide
b.Position = .(, -, , posY)
b.Position = .(, , , posY)
b.AnchorPoint = .(, )
b.Text = text
b.BackgroundColor3 = .(, , )
b.TextColor3 = .(, , )
b.AutoButtonColor =
b.Parent = gui
b
bodyFollowBtn = (, , )
lockYBtn = (, , )
upBtn = (, , )
downBtn = (, , )
ySpeedDownBtn = (, , )
ySpeedUpBtn = (, , )
bodyFollowBtn.MouseButton1Click:(()
bodyFollowEnabled = bodyFollowEnabled
bodyFollowBtn.Text = .. (bodyFollowEnabled )
)
lockYBtn.MouseButton1Click:(()
lockYEnabled = lockYEnabled
lockYBtn.Text = .. (lockYEnabled )
)
upBtn.MouseButton1Down:(()
upHeld =
)
upBtn.MouseButton1Up:(()
upHeld =
)
downBtn.MouseButton1Down:(()
downHeld =
)
downBtn.MouseButton1Up:(()
downHeld =
)
ySpeedDownBtn.MouseButton1Click:(()
ySpeedMultiplier = .(, ySpeedMultiplier - )
)
ySpeedUpBtn.MouseButton1Click:(()
ySpeedMultiplier = .(, ySpeedMultiplier + )
)
joystickTouch =
joystickStartPos =
UIS.TouchStarted:((input)
enabled joystickTouch
screenSize = .CurrentCamera.ViewportSize
input.Position.X < screenSize.X /
joystickTouch = input
joystickStartPos = input.Position
)
UIS.TouchMoved:((input)
enabled input == joystickTouch
delta = input.Position - joystickStartPos
maxRadius =
delta.Magnitude > maxRadius
delta = delta.Unit * maxRadius
inputVector = .(delta.X / maxRadius, , delta.Y / maxRadius)
)
UIS.TouchEnded:((input)
enabled input == joystickTouch
joystickTouch =
inputVector = .zero
)
camera = .CurrentCamera
camera.CameraType = .CameraType.Custom
()
character = player.Character
character
rootPart = character:()
rootPart
camera.CameraSubject = character:() rootPart
camera.CameraType = .CameraType.Custom
player.CharacterAdded:(()
.()
char = player.Character
root = char:()
humanoid = char:()
()
)
()
RS.RenderStepped:((dt)
char root humanoid
enabled
camCF = camera.CFrame
camRight = .(camCF.RightVector.X, , camCF.RightVector.Z).Unit
camForward = .(camCF.LookVector.X, , camCF.LookVector.Z).Unit
moveDir = .zero
inputVector.Magnitude >
moveDir = (camRight * inputVector.X + camForward * -inputVector.Z).Unit
targetVelocity = moveDir * speed * inputVector.Magnitude
currentVelocity = currentVelocity:(targetVelocity, .(lerpSpeed * dt, , ))
bodyFollowEnabled
lastLookDir = lastLookDir:(moveDir, .(lerpSpeed * dt, , ))
root.CFrame = .(root.Position, root.Position + lastLookDir)
currentVelocity = currentVelocity:(.zero, .(lerpSpeed * dt, , ))
finalYVelocity =
upHeld
finalYVelocity = ySpeed * ySpeedMultiplier
downHeld
finalYVelocity = -ySpeed * ySpeedMultiplier
lockYEnabled
finalYVelocity =
lockYEnabled upHeld downHeld
velocityControl.MaxForce = .(, , )
velocityControl.Velocity = .(currentVelocity.X, finalYVelocity, currentVelocity.Z)
velocityControl.MaxForce = .(, , )
velocityControl.Velocity = .(currentVelocity.X, , currentVelocity.Z)
velocityControl.Velocity = .zero
)Use velocity to roll in a ball or lock by Y to fly!

Universal