Okay, real talk, how do you PROPERLY script the player's camera?

The camera is something I’ve NEVER been able to code properly.

I tried to do an ADS (aim down sights) zoom and camera shift to the right, changing the camera’s position would make the player spin uncontrollably

and setting the cameramode to scriptable would sorta work? It would zoom and change the position, but it would instantly go out to vanilla camera after doing so (via TweenService)

I tried to move the player’s camera along with the head, no zoom, just a camera position change, the same two issues happened.

With this I seriously need to ask how do I change up the player’s camera without it breaking??

I tried to do an ADS zoom (…)

To be more specific about that one, this is what I tried doing:

-- excluding any variables, should be understandable enough

tool.MouseButton2Down:Connect(function()
camera.CFrame = currentPosition * CFrame.new(x,x,x)
-- ^ This would uncontrollably spin the player ^
camera.CameraMode = Enum.CameraMode.Scriptable -- To be fair I don't remember if it was CameraMode or CameraType

local tween = TS:Create(camera, time, goal) -- (goal is currentPosition * CFrame.new(x,x,x) 

tween:Play()
-- ^ After the tween was finished, the camera instantly went back to its original position before the tween
-- and since the mode is scriptable, it would kind of... not work anymore
end)

I would be more than happy to get some advice on this, because I happen to be EXTREMELY stuck on camera scripting.

If you aren’t worried about rotating the camera, I’m pretty sure Humanoid.CameraOffset works in first person.