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.
