What is the best way to go about creating a zoom feature while maintaining consistent controller/mouse sensitviity?

I am interested in implementing a weapon zoom feature that essentially just magnifies the player camera. I am currently adjusting FOV to create this zoom effect, however, doing so makes use of the zoomed camera very challenging since the sensitivity effectively increases by making the viewport so small. I have tried adjusting the turn sensitivity simultaneously to compensate for this effect but am finding that when turn sensitivity is very low the controls feel weird (it becomes very challenging to move the camera in a straight line and almost seems to curve). Is there a good way to create a high level of magnification while still maintaining an illusion of consistent sensitivity between magnified and unmagnified camera motion?

Are you doing this in third person or first person? First person, keep to FOV while if you’re in third person instead adjust the spring arm.

As for the sensitivity issue, if you stick to FOV you’ll just want to scale sensitivity.

You’ll want the variables CurrentFOV, CurrentSensitivity, MaxFOV (The base FOV your camera is set to), MinFOV (How far you want to zoom in), and BaseSensitivity (1.0f).

Whenever you change the FOV by scrolling or whatever, do your zooming in however you do it (working out CurrentFOV and clamping between MaxFOV and MinFOV then setting the camera FOV to CurrentFOV probably).

Afterwards set CurrentSensitivity to BaseSensitivity * ((Tan(CurrentFOV / 2)) / (Tan(MaxFOV / 2)))

Then when you do your Look input (add ControllerYaw input and add ControllerPitch input) do MouseX x CurrentSensitivity for Yaw and MouseY x CurrentSensitivity for Pitch.

If you want smooth zooming I’d also recommend interpolating it.

Edit: Made some blueprints for you to look at.

This first one is the scaling. I used a scroll well.

Zoom sensitivity I set to three to speed up zooming in. Multiplied by negative one so scrolling up zoomed in and back zoomed out, but that’s personal preference. Lerped and clamped the FOV to make it smooth.

Then, in event tick, you set the actual camera. ’

I did a double clamp here since although TargetFOV shouldn’t be out of bounds, it just catches and prevents errors. You set the current, then set field of view. If you want it to be smoother, lower the interp speed. If you want snappier, increase.

Then, you set current sensitivity. Base Sensitivity times (TanDegree(CurrentFOV / 2) divided by TanDegree(MaxFOV / 2))

Then feed it into your input and that’ll slow down looking around and make it less sensitive.