The frequency at which the .RenderStepped event is fired is equal to the the client’s framerate, which is an important fact your script doesn’t seem to be taking into account. In order to to achieve a constant intensity of camera movement under all circumstances, you can read the dt (deltaTime) parameter of the RenderStepped event and multiply that with the smoothness variable that you’re using in your lerp function. Additionally, you should clamp the alpha argument of the lerp function to values less than or equal to 1. Under the assumption that the game is normally running at 60 FPS, your script could look like this:
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local camera = workspace.CurrentCamera
local speed = 3
local intensity = 0.08
local smoothness = 0.2
RunService.RenderStepped:Connect(function(deltaTime)
local t = tick()
local x = math.cos(t * speed) * intensity
local y = math.sin(t * speed) * intensity
local z = -10
if Sprinting == true and hum.MoveDirection.Magnitude > 0 then
intensity = 0.5
speed = 10
else
speed = 3
intensity = 0.08
end
local cf = CFrame.new(Vector3.new(x, y, 0), Vector3.new(x*0.95, y*0.95, z)) + camera.CFrame.Position
camera.CFrame = camera.CFrame:Lerp(cf * camera.CFrame.Rotation, math.clamp(smoothness * deltaTime * 60, 0, 1))
end)