Run it
Copy the script and paste it into your executor.
Players = :()
UIS = :()
RS = :()
player = Players.LocalPlayer
playerGui = player:()
cam = .CurrentCamera
onMobile = UIS.KeyboardEnabled
keysDown = {}
rotating =
touchPos =
freecamEnabled =
renderConnection
lockConnection
originalWalkSpeed
originalJumpPower
savedCFrame
currentCharacter
:() .Loaded:()
gui = .()
gui.Name =
gui.ResetOnSpawn =
gui.IgnoreGuiInset =
gui.DisplayOrder =
gui.Parent = playerGui
button = .()
button.Size = .(,,,)
button.Position = .(,-,,)
button.BackgroundTransparency =
button.Image =
button.ZIndex =
button.Parent = gui
inner = .()
inner.Size = .(,,,)
inner.Position = .(,,,)
inner.BackgroundTransparency =
inner.Image =
inner.ZIndex =
inner.Parent = button
speed =
sens =
speed /=
onMobile sens *=
(char)
currentCharacter = char
hrp = char:()
humanoid = char:()
originalWalkSpeed = humanoid.WalkSpeed
originalJumpPower = humanoid.JumpPower
humanoid.WalkSpeed =
humanoid.JumpPower =
savedCFrame = hrp.CFrame
lockConnection
lockConnection:()
lockConnection = RS.Heartbeat:(()
freecamEnabled hrp.Parent
hrp.CFrame = savedCFrame
hrp.AssemblyLinearVelocity = .zero
hrp.AssemblyAngularVelocity = .zero
)
()
currentCharacter
char = currentCharacter
hrp = char:()
humanoid = char:()
lockConnection
lockConnection:()
lockConnection =
humanoid
humanoid.WalkSpeed = originalWalkSpeed
humanoid.JumpPower = originalJumpPower
hrp
hrp.AssemblyLinearVelocity = .zero
hrp.AssemblyAngularVelocity = .zero
savedCFrame =
()
char = player.Character
char
humanoid = char:()
humanoid
cam.CameraType = .CameraType.Custom
cam.CameraSubject = humanoid
()
freecamEnabled
rotating
delta = UIS:()
cf = cam.CFrame
yAngle = cf:(.RotationOrder.YZX)
newAmount = .(yAngle)+delta.Y
newAmount > newAmount < -
(yAngle< delta.Y<) (yAngle> delta.Y>)
delta = .(delta.X,)
cf *= .(-.(delta.Y),,)
cf = .(,-.(delta.X),) * (cf - cf.Position) + cf.Position
cf = .(cf.Position, cf.Position + cf.LookVector)
delta ~= .(,)
cam.CFrame = cam.CFrame:(cf,sens)
UIS.MouseBehavior = .MouseBehavior.LockCurrentPosition
UIS.MouseBehavior = .MouseBehavior.Default
keysDown[]
cam.CFrame *= .(,,-speed)
keysDown[]
cam.CFrame *= .(-speed,,)
keysDown[]
cam.CFrame *= .(,,speed)
keysDown[]
cam.CFrame *= .(speed,,)
validKeys = {,,,}
UIS.InputBegan:((Input)
freecamEnabled
_, key (validKeys)
key == (Input.KeyCode)
keysDown[key] =
Input.UserInputType == .UserInputType.MouseButton2
(Input.UserInputType == .UserInputType.Touch UIS:().X>(cam.ViewportSize.X/))
rotating =
Input.UserInputType == .UserInputType.Touch
Input.Position.X < cam.ViewportSize.X/
touchPos = Input.Position
)
UIS.InputEnded:((Input)
freecamEnabled
key,_ (keysDown)
key == (Input.KeyCode)
keysDown[key] =
Input.UserInputType == .UserInputType.MouseButton2
(Input.UserInputType == .UserInputType.Touch UIS:().X>(cam.ViewportSize.X/))
rotating =
Input.UserInputType == .UserInputType.Touch touchPos
Input.Position.X < cam.ViewportSize.X/
touchPos =
keysDown[] =
keysDown[] =
keysDown[] =
keysDown[] =
)
UIS.TouchMoved:((input)
freecamEnabled
touchPos
input.Position.X < cam.ViewportSize.X/
input.Position.Y < touchPos.Y
keysDown[] =
keysDown[] =
keysDown[] =
keysDown[] =
input.Position.X < (touchPos.X-)
keysDown[] =
keysDown[] =
input.Position.X > (touchPos.X+)
keysDown[] =
keysDown[] =
keysDown[] =
keysDown[] =
)
button.MouseButton1Click:(()
freecamEnabled = freecamEnabled
char = player.Character player.CharacterAdded:()
freecamEnabled
cam.CameraType = .CameraType.Scriptable
(char)
renderConnection = RS.RenderStepped:(renderStepped)
()
()
renderConnection
renderConnection:()
renderConnection =
)
player.CharacterAdded:((char)
.()
freecamEnabled
(char)
()
)Freecam

Universal