
KeylessUniversal

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local ContentProvider = game:GetService("ContentProvider")
local player = Players.LocalPlayer
local camera = workspace.CurrentCamera
--------------------------------------------------
-- SETTINGS
--------------------------------------------------
local sensitivity = 0.2
local yaw = 0
local pitch = 0
local camConnection
local moveTime = 0
local battery = 100
local trackingGlitch = false
--------------------------------------------------
-- CLEAN OLD GUI
--------------------------------------------------
local old = player:WaitForChild("PlayerGui"):FindFirstChild("BodyCamUI")
if old then old:Destroy() end
--------------------------------------------------
-- GUI ROOT
--------------------------------------------------
local gui = Instance.new("ScreenGui")
gui.Name = "BodyCamUI"
gui.ResetOnSpawn = false
gui.IgnoreGuiInset = true
gui.Parent = player.PlayerGui
--------------------------------------------------
-- RIGHT SIDE INFO
--------------------------------------------------
local infoLabel = Instance.new("TextLabel")
infoLabel.Size = UDim2.fromScale(0.3,0.12)
infoLabel.Position = UDim2.fromScale(0.65,0.02)
infoLabel.BackgroundTransparency = 1
infoLabel.TextColor3 = Color3.new(1,1,1)
infoLabel.TextScaled = true
infoLabel.Font = Enum.Font.Code
infoLabel.TextXAlignment = Enum.TextXAlignment.Right
infoLabel.Parent = gui
--------------------------------------------------
-- REC INDICATOR
--------------------------------------------------
local recDot = Instance.new("Frame")
recDot.Size = UDim2.fromScale(0.015,0.03)
recDot.Position = UDim2.fromScale(0.62,0.035)
recDot.BackgroundColor3 = Color3.new(1,0,0)
recDot.BorderSizePixel = 0
recDot.Parent = gui
local recText = Instance.new("TextLabel")
recText.Size = UDim2.fromScale(0.05,0.05)
recText.Position = UDim2.fromScale(0.64,0.02)
recText.BackgroundTransparency = 1
recText.Text = "REC"
recText.TextColor3 = Color3.new(1,0,0)
recText.TextScaled = true
recText.Font = Enum.Font.Code
recText.TextXAlignment = Enum.TextXAlignment.Left
recText.Parent = gui
task.spawn(function()
while true do
recDot.Visible = not recDot.Visible
task.wait(0.6)
end
end)
--------------------------------------------------
-- FILM GRAIN
--------------------------------------------------
local grain = Instance.new("Frame")
grain.Size = UDim2.fromScale(1,1)
grain.BackgroundColor3 = Color3.new(1,1,1)
grain.BackgroundTransparency = 0.94
grain.BorderSizePixel = 0
grain.Parent = gui
--------------------------------------------------
-- VIGNETTE
--------------------------------------------------
local function makeEdge(pos, size, rotation)
local edge = Instance.new("Frame")
edge.Size = size
edge.Position = pos
edge.BackgroundColor3 = Color3.new(0,0,0)
edge.BorderSizePixel = 0
edge.Parent = gui
local gradient = Instance.new("UIGradient")
gradient.Color = ColorSequence.new(Color3.new(0,0,0), Color3.new(0,0,0))
gradient.Transparency = NumberSequence.new{
NumberSequenceKeypoint.new(0, 0.7),
NumberSequenceKeypoint.new(1, 1)
}
gradient.Rotation = rotation
gradient.Parent = edge
end
makeEdge(UDim2.fromScale(0,0), UDim2.fromScale(1,0.1), 90)
makeEdge(UDim2.fromScale(0,0.9), UDim2.fromScale(1,0.1), -90)
makeEdge(UDim2.fromScale(0,0), UDim2.fromScale(0.1,1), 0)
makeEdge(UDim2.fromScale(0.9,0), UDim2.fromScale(0.1,1), 180)
--------------------------------------------------
-- NO SIGNAL
--------------------------------------------------
local noSignal = Instance.new("Frame")
noSignal.Size = UDim2.fromScale(1,1)
noSignal.BackgroundColor3 = Color3.new(0,0,0)
noSignal.Visible = false
noSignal.BorderSizePixel = 0
noSignal.ZIndex = 20
noSignal.Parent = gui
local signalText = Instance.new("TextLabel")
signalText.Size = UDim2.fromScale(1,0.2)
signalText.Position = UDim2.fromScale(0,0.4)
signalText.BackgroundTransparency = 1
signalText.Text = "NO SIGNAL"
signalText.TextColor3 = Color3.new(1,1,1)
signalText.TextScaled = true
signalText.Font = Enum.Font.Arcade
signalText.ZIndex = 21
signalText.Parent = noSignal
--------------------------------------------------
-- WHITE NOISE STATIC
--------------------------------------------------
local staticSound = Instance.new("Sound")
staticSound.SoundId = "rbxassetid://76866707921480"
staticSound.Volume = 0.8
staticSound.Looped = true
staticSound.Parent = gui
ContentProvider:PreloadAsync({staticSound})
--------------------------------------------------
-- VHS TRACKING ERROR
--------------------------------------------------
local function triggerTrackingError()
if trackingGlitch then return end
trackingGlitch = true
local duration = 0.4
local start = tick()
while tick() - start < duration do
task.wait()
local offsetX = math.random(-6,6)/100
local offsetY = math.random(-3,3)/100
camera.CFrame *= CFrame.new(offsetX, offsetY, 0)
end
trackingGlitch = false
end
--------------------------------------------------
-- CAMERA SYSTEM
--------------------------------------------------
local function startBodyCam(character)
local humanoid = character:WaitForChild("Humanoid")
local root = character:WaitForChild("HumanoidRootPart")
local torso = character:FindFirstChild("UpperTorso") or character:FindFirstChild("Torso")
camera.CameraType = Enum.CameraType.Scriptable
camera.FieldOfView = 70
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
UserInputService.MouseIconEnabled = false
humanoid.AutoRotate = false
yaw = 0
pitch = 0
moveTime = 0
battery = 100
local lastHealth = humanoid.Health
if camConnection then
camConnection:Disconnect()
end
camConnection = RunService.RenderStepped:Connect(function(dt)
if humanoid.Health <= 0 then return end
-- Mouse
local delta = UserInputService:GetMouseDelta()
yaw -= delta.X * sensitivity
pitch -= delta.Y * sensitivity
pitch = math.clamp(pitch, -75, 75)
-- Rotate body (updated)
local state = humanoid:GetState()
if state ~= Enum.HumanoidStateType.Physics
and state ~= Enum.HumanoidStateType.FallingDown
and state ~= Enum.HumanoidStateType.Ragdoll then
root.CFrame =
CFrame.new(root.Position)
* CFrame.Angles(0, math.rad(yaw), 0)
end
-- Movement sway
local speed = root.Velocity.Magnitude
local swayX, swayY = 0, 0
if speed > 1 then
moveTime += dt * 6
swayX = math.sin(moveTime) * 0.03
swayY = math.abs(math.cos(moveTime)) * 0.03
end
-- Damage glitch
local glitchOffset = Vector3.new(0,0,0)
if humanoid.Health < lastHealth then
glitchOffset = Vector3.new(
math.random(-2,2)/100,
math.random(-2,2)/100,
0
)
end
lastHealth = humanoid.Health
local camCF =
torso.CFrame
* CFrame.new(swayX, 0.4 + swayY, -0.75)
* CFrame.Angles(math.rad(pitch), 0, 0)
* CFrame.new(glitchOffset)
camera.CFrame = camCF
-- Film grain flicker
grain.BackgroundTransparency = 0.93 + math.random() * 0.03
-- Battery drain (1% per minute)
battery -= (1/60) * dt
battery = math.clamp(battery, 0, 100)
-- Low battery color
if battery <= 15 then
infoLabel.TextColor3 = Color3.new(1,0,0)
else
infoLabel.TextColor3 = Color3.new(1,1,1)
end
-- Random VHS tracking error
if not trackingGlitch then
local chance = 0.001
if battery < 20 then
chance = 0.005
end
if math.random() < chance then
task.spawn(triggerTrackingError)
end
end
local dateNow = os.date("%d/%m/%Y")
local timeNow = os.date("%H:%M:%S")
infoLabel.Text =
"BAT "..math.floor(battery).."%\n"
..dateNow.."\n"
..timeNow
-- Battery death
if battery <= 0 then
noSignal.Visible = true
staticSound:Play()
camConnection:Disconnect()
end
end)
humanoid.Died:Connect(function()
noSignal.Visible = true
staticSound:Play()
end)
end
--------------------------------------------------
-- RESPAWN
--------------------------------------------------
player.CharacterAdded:Connect(function(character)
noSignal.Visible = false
staticSound:Stop()
startBodyCam(character)
end)
if player.Character then
startBodyCam(player.Character)
end



Script made by chatgpt. If you dont like it, ignore it.
Funktioniert iwi nicht
works fine, but i cant move my mouse
@XenoxX I recomend to use on pc. What device do you use?