Does anyone know how to lock the camera to the player's head?

I want to achieve something where the camera always points in the direction of the head, but the player can still move it up and down and look around. Does anyone know how to do this?

Perhaps Camera | Documentation - Roblox Creator Hub could be of use to you. Or, you can set an offset for the camera to make the camera point in the direction of the player head, that also works

1 Like

how do i program the camera to point to the head then?

Just change the camera type to attachment

1 Like

can you script it for me? If i tried it would take a whole day :skull::skull:

Some thing like this perhaps?

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")

local Player = Players.LocalPlayer
local Character = Player.Character or Player.CharacterAdded:Wait()
local Camera = workspace.CurrentCamera

local HEAD_OFFSET = Vector3.new(0, 0.5, 0)  -- Offset to position camera slightly above head
local ROTATION_SPEED = 0.005  -- Adjust this value to change rotation sensitivity

local cameraAngleX = 0
local cameraAngleY = 0

local function updateCamera()
	local head = Character:FindFirstChild("Head")
	if not head then return end

	-- Update camera position
	local headCFrame = head.CFrame
	local cameraPosition = headCFrame.Position + HEAD_OFFSET

	-- Apply rotation
	local cameraRotation = CFrame.fromEulerAnglesYXZ(cameraAngleY, cameraAngleX, 0)
	local cameraCFrame = CFrame.new(cameraPosition) * cameraRotation

	Camera.CFrame = cameraCFrame
end

UserInputService.InputChanged:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseMovement then
		cameraAngleX = cameraAngleX - input.Delta.X * ROTATION_SPEED
		cameraAngleY = cameraAngleY - input.Delta.Y * ROTATION_SPEED

		-- Clamp vertical rotation to prevent over-rotation
		cameraAngleY = math.clamp(cameraAngleY, -math.pi/2, math.pi/2)
	end
end)

RunService.RenderStepped:Connect(updateCamera)

-- Lock mouse to center of screen
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
1 Like

The script does make me go in first person and able to see my body, however I can rotate my camera 360 degrees as well as see my accessories. I want to achieve the camera behaving like a headcam

You aren’t supposed to ask for full systems on the devforum.

1 Like

If i understand correctly what you want is to set the camera type or whatever it was called to LockFirstPerson in StarterPlayer?

doesn’t lock first person make you not able to see your own body??

What do you want to happen? To see your own body but be in first person?
If so, then I think your best bet is to try to find where Roblox makes your body transparent when in first person and adjust it to only affect the head and maybe the torso

1 Like

first person body transparency cannot be changed i think, what people normally do is to change the camera to scriptable and do something i cannot comprehend

local Char = [Your Player Character]
local Camera = game.Workspace.Camera
Camera.CameraType = Enum.CameraType.Scriptable
local CamOffset = Vector3.new([Your desired offset])

while wait() do
Camera.CFrame = (Char.CFrame + CamOffset)*Char.Head.CFrame.Rotation
end

-- I hope this'll work.