I created a similar question recently, about a script I created not working with a custom character, andI worked on my script and got it almost working, but the offset of the head rotation is off, and I can't seem to fix it. script:
local player = game.Players.LocalPlayer
local character = player.character
local head = character.Head
local uppertorso = character.UpperTorso
local lowertorso = character.LowerTorso
local camera = game.Workspace.CurrentCamera
local uis = game:GetService("UserInputService")
local rs = game:GetService("RunService")
function headMove()
local camangle = camera.CFrame.lookVector
character.UpperTorso.Neck.Transform = CFrame.Angles(camangle.y,camangle.x, 0)
print(character.UpperTorso.Neck.Transform)
end
rs.Stepped:Connect(headMove)
And here is how it is behaving (GIF is low quality, sorry)

3 comments
The link should work, but basically it shows that the offset of the Neck Motor6D's Transform is off, and not centered.
I don't know if this is helpful, but it is also using the Default Animations.
oof I fixed it useing camera.CFrame.rightVector :P