
Key RequiredUniversal

local player = game.Players.LocalPlayer
local camera = workspace.CurrentCamera
local runService = game:GetService("RunService")
local userInput = game:GetService("UserInputService")
camera.CameraType = Enum.CameraType.Scriptable
player.CameraMode = Enum.CameraMode.Classic
local sensitivity = 0.15
local pitch = 0
local yaw = 0
local function hideHead(character)
for _, obj in pairs(character:GetDescendants()) do
if obj:IsA("BasePart") and obj.Name == "Head" then
obj.LocalTransparencyModifier = 1
end
if obj:IsA("Accessory") then
local handle = obj:FindFirstChild("Handle")
if handle then
handle.LocalTransparencyModifier = 1
end
end
end
end
local function setupCharacter(character)
local humanoid = character:WaitForChild("Humanoid")
local root = character:WaitForChild("HumanoidRootPart")
local head = character:WaitForChild("Head")
humanoid.AutoRotate = false
hideHead(character)
userInput.MouseBehavior = Enum.MouseBehavior.LockCenter
userInput.MouseIconEnabled = false
userInput.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseMovement then
yaw -= input.Delta.X * sensitivity
pitch -= input.Delta.Y * sensitivity
pitch = math.clamp(pitch, -80, 80)
end
end)
runService.RenderStepped:Connect(function()
if humanoid.Health <= 0 then return end
-- Rotate character ONLY on Y
root.CFrame = CFrame.new(root.Position) * CFrame.Angles(0, math.rad(yaw), 0)
-- Camera uses root rotation, pitch applied locally
local baseCFrame = root.CFrame * CFrame.new(0, 1.5, 0)
camera.CFrame =
baseCFrame
* CFrame.Angles(math.rad(pitch), 0, 0)
* CFrame.new(0, 0, -0.4)
end)
end
if player.Character then
setupCharacter(player.Character)
end
player.CharacterAdded:Connect(setupCharacter)No comments yet for this script.



