I’m trying to make a first-person camera completely from scratch, for learning purposes, but I’m getting this “error”:

the camera moves in the direction of my mouse, but it always returns to the “center”

Code:

```
runService.RenderStepped:Connect(function(deltaTime)
userInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
local camDeltaX = userInputService:GetMouseDelta().X
local camDeltaY = userInputService:GetMouseDelta().Y
local newY = -(camera.CFrame.Rotation.X + camDeltaX) * deltaTime * camSensX
local newX = -(camera.CFrame.Rotation.Y + camDeltaY) * deltaTime * camSensY
camera.CFrame = CFrame.new(head.Position) * CFrame.Angles(newX, newY, 0)
end)
```

2 Likes

You’re using CFrame.Rotation which doesn’t get the actually return the rotation that you expect

You should be using CFrame:ToOrientation()

```
local a = math.rad(90)
local cf = CFrame.Angles(a, a, a).Rotation
print(cf.X, cf.Y, cf.Z) --> 0 0 0
local deg = math.deg
local cf = Vector3.new(CFrame.Angles(a, a, a):ToOrientation())
local x, y, z = CFrame.Angles(a, a, a):ToOrientation() -- optionally you can do this if you like it better
print(deg(cf.X), deg(cf.Y), deg(cf.Z)) --> 0 90 -180 (this is correct even though we set it all to 90)
```

Now i think it’s ToOrientation that is the correct one, however if you start to notice that it doesn’t orient properly when going 360 degrees, try using ToEulerAnglesXYZ but I think ToOrientation is correct