Camera fly script PC ONLY
Key Required

Camera fly script PC ONLY

[GRANNY] Hello Neighbor Diablo’s Circuscheedabob333cheedabob333 1K views 198 executesUpdated Dec 8, 2025
Unrated
00
Lua Script•184 lines (4035 chars)
local input = game:GetService("UserInputService")
local player = game.Players.LocalPlayer
local camera = workspace.CurrentCamera

local speed = 1
local rotspeed = math.rad(2) -- Use radians for rotation speed

local fly = false

-- Camera rotation state
local yaw = 0
local pitch = 0
local pitchMin = math.rad(-80)
local pitchMax = math.rad(80)

-- Camera position state
local camPos = nil

local oldspeed = 0

local character = nil
local hum = nil

local function intro()
	local gui = Instance.new("ScreenGui", player.PlayerGui)
	gui.SafeAreaCompatibility = Enum.SafeAreaCompatibility.None
	gui.ScreenInsets = Enum.ScreenInsets.None
	gui.ClipToDeviceSafeArea = false
	local text = Instance.new("TextLabel", gui)
	text.Position = UDim2.new(0, 0, 0.917, 0)
	text.Size = UDim2.new(0, 342, 0, 50)
	text.BackgroundTransparency = 1
	text.TextColor3 = Color3.new(1,1,1)
	text.TextScaled = true
	text.Text = "Fly Camera Script by Cheedabob"
	task.wait(2)
	text.Text = "Press G to camera fly"
	task.wait(2)
	text.Text = "WASD to move"
	task.wait(2)
	text.Text = "Arrow keys to rotate"
	task.wait(2)
	text.Text = "Enjoy :)"
	task.wait(2)
	gui:Destroy()
end

local function resetFly()
	if fly then
		fly = false
		if hum then
			hum.WalkSpeed = oldspeed
		end
		camera.CameraType = Enum.CameraType.Custom
		if character then
			character:PivotTo(camera.CFrame)
		end
	end
end

local function onCharacterAdded(char)
	character = char
	hum = character:FindFirstChildOfClass("Humanoid")
	if hum then
		hum.Died:Connect(function()
			resetFly()
		end)
	end
end

-- Initial character setup
if player.Character then
	onCharacterAdded(player.Character)
end
player.CharacterAdded:Connect(onCharacterAdded)

--switch
input.InputBegan:Connect(function(key)
	if key.KeyCode == Enum.KeyCode.G then
		if not character or not hum then return end
		fly = not fly
		if fly then
			camera.CameraType = Enum.CameraType.Scriptable
			oldspeed = hum.WalkSpeed
			hum.WalkSpeed = 0
			local look = camera.CFrame.LookVector
			yaw = math.atan2(look.X, look.Z)
			pitch = math.asin(look.Y)
			camPos = camera.CFrame.Position
		else
			hum.WalkSpeed = oldspeed
			camera.CameraType = Enum.CameraType.Custom
			if character then
				character:PivotTo(camera.CFrame)
			end
		end
	end
end)

local w = false
local a = false
local s = false
local d = false

local left = false
local right = false
local up = false
local down = false

local function SetKey(inputObj, bool)
	local key = inputObj.KeyCode
	if key == Enum.KeyCode.W then
		w = bool
	elseif key == Enum.KeyCode.A then
		a = bool
	elseif key == Enum.KeyCode.S then
		s = bool
	elseif key == Enum.KeyCode.D then
		d = bool
	elseif key == Enum.KeyCode.Left then
		left = bool
	elseif key == Enum.KeyCode.Right then
		right = bool
	elseif key == Enum.KeyCode.Up then
		up = bool
	elseif key == Enum.KeyCode.Down then
		down = bool
	end
end

--movement
input.InputBegan:Connect(function(key)
	SetKey(key, true)
end)
input.InputEnded:Connect(function(key)
	SetKey(key, false)
end)

local run = game:GetService("RunService")
run.RenderStepped:Connect(function()
	if fly and camPos then
		-- Update yaw/pitch
		if left then
			yaw = yaw + rotspeed
		end
		if right then
			yaw = yaw - rotspeed
		end
		if up then
			pitch = math.clamp(pitch + rotspeed, pitchMin, pitchMax)
		end
		if down then
			pitch = math.clamp(pitch - rotspeed, pitchMin, pitchMax)
		end

		-- Calculate new camera rotation
		local rotCFrame = CFrame.Angles(0, yaw, 0) * CFrame.Angles(pitch, 0, 0)

		-- Move camera relative to look direction
		local moveDir = Vector3.new()
		local camCF = CFrame.new(camPos) * rotCFrame
		if w then
			moveDir = moveDir + camCF.LookVector
		end
		if s then
			moveDir = moveDir - camCF.LookVector
		end
		if a then
			moveDir = moveDir - camCF.RightVector
		end
		if d then
			moveDir = moveDir + camCF.RightVector
		end
		if moveDir.Magnitude > 0 then
			moveDir = moveDir.Unit
			camPos = camPos + moveDir * speed
		end

		-- Set camera CFrame
		camera.CFrame = CFrame.new(camPos) * rotCFrame
	end
end)

intro()

Features & Information

This script makes your camera fly and teleporting Controls: Fly - G Move - WASD Rotate - Arrow keys

Community Comments (2)

brastflostbrastflostDec 8, 2025

w script

ezburboloniezburboloniDec 8, 2025

terrible script

More Scripts for [GRANNY] Hello Neighbor Diablo’s Circus