Hello, I'm currently working on guns and I need a smooth mouse sensitivity script, I've been looking in the free models and found this
function RotateCamera(x, y) Camera.CoordinateFrame = CFrame.new(Camera.Focus.p) * (Camera.CoordinateFrame - Camera.CoordinateFrame.p) * CFrame.Angles(x, y, 0) * CFrame.new(0, 0, (Camera.CoordinateFrame.p - Camera.Focus.p).magnitude) end function GetAngles(cf) local lv = cf.lookVector return -math.asin(lv.y), math.atan2(lv.x, -lv.z) end local LastCF = Camera.CoordinateFrame function UpdateSensitivity() if _G.MouseSensitivity ~= 1 then -- no need to do this if it's 1 local x, y = GetAngles(LastCF:toObjectSpace(Camera.CoordinateFrame)) Camera.CoordinateFrame = LastCF RotateCamera(x * -(_G.MouseSensitivity + _G.MouseSensitivityOffset), y * -(_G.MouseSensitivity + _G.MouseSensitivityOffset)) LastCF = Camera.CoordinateFrame end end Mouse.Move:connect(function() UpdateSensitivity() end) Mouse.Idle:connect(function() LastCF = Camera.CoordinateFrame end)
But the camera rotation is not smooth and a bit shaking. I'm trying to use render stepped to make the rotation smooth, but yet I dont find a way to get it works, this is what I tried so far, and it doesn't work (camera gets stuck to its first position)
local LastCF = Camera.CoordinateFrame function UpdateSensitivity() if _G.MouseSensitivity ~= 1 then local x, y = GetAngles(LastCF:toObjectSpace(Camera.CoordinateFrame)) Camera.CoordinateFrame = LastCF RotateCamera(x * -(_G.MouseSensitivity + _G.MouseSensitivityOffset), y * -(_G.MouseSensitivity + _G.MouseSensitivityOffset)) end end game:GetService("RunService").RenderStepped:connect(function() if Camera.CoordinateFrame ~= LastCF then UpdateSensitivity() end LastCF = Camera.CoordinateFrame end)
It breaks because it uses the last saved position of the camera, yet it should only use the old rotation, apply sensitivity and apply it to the new position. Does anyone know how to fix it ?
Thanks for helping me asap.