This is an intsy-bitsy problem, but it has grown quite annoying. This is my FPS-3rd Person script, which allows a smoother camera when zoomed in(instead of the griddy feeling when you increase FOV in FirstPerson). However, when I switch from 3rd person to first person, the camera doesn't face where it was facing in 3rd person but instead, is facing towards where it was last looking when it was in first person.
Say my camera points at Point A in first person. I zoom out and move my camera towards Point B. When I zoom back in to first person, instead of still looking at Point B I'm looking at Point A again! Is that a good example? It's annoying when you are shooting at an enemy and zoom in only to be forced to look behind you!
input.InputChanged:connect(function(inputObject) -- this is what calculates where I should be looking at in first person. for some reason, it stops calculating this when I zoom out. I can't figure out a way to keep this function running because I need the inputObject variable. if inputObject.UserInputType == Enum.UserInputType.MouseMovement then local delta = Vector2.new(inputObject.Delta.x/Sensitivity, inputObject.Delta.y/Sensitivity) * Smoothness local X = TargetAngleX - delta.y TargetAngleX = (X >= 80 and 80) or (X <= -80 and -80) or X TargetAngleY = (TargetAngleY - delta.x) %360 CamPos = CamPos + (TargetCamPos - CamPos) * 0.28 AngleX = AngleX + (TargetAngleX - AngleX) * 0.35 local dist = TargetAngleY - AngleY dist = math.abs(dist) > 180 and dist - (dist / math.abs(dist)) * 360 or dist AngleY = (AngleY + dist *0.35) %360 end end) script.Parent:WaitForChild("IsFirstPerson").Changed:connect(function() if not running and script.Parent.IsFirstPerson.Value == true then running = true runService:BindToRenderStep("RunFirstPerson", Enum.RenderPriority.First.Value + 1, function() if running then updatechar() workspace.CurrentCamera.CameraType = Enum.CameraType.Scriptable workspace.CurrentCamera.CoordinateFrame = CFrame.new(head.Position) * CFrame.Angles(0,math.rad(AngleY),0) * CFrame.Angles(math.rad(AngleX),0,0) * CFrame.new(0,0,0) -- offset humanoidpart.CFrame = CFrame.new(humanoidpart.Position) * CFrame.Angles(0,math.rad(AngleY),0) else game:GetService("UserInputService").MouseBehavior = Enum.MouseBehavior.Default end game:GetService("UserInputService").MouseBehavior = Enum.MouseBehavior.LockCenter end) end end)