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)
