I recommend use lerp and update it with ({game:GetService(“Stepped”)})[2].
Something like this:
local Services = {
PLS = game:GetService("Players");
RS = game:GetService("RunService")
}
local Plr = Services.PLS.LocalPlayer
local Char = Plr.Character or Plr.CharacterAdded:Wait()
local Camera = workspace.CurrentCamera
local Pos, Offset, Base = Vector3.new(), Vector3.new(0, 1.5, 5)
local function Lerp(A, B, C)
return A+((B-A)*C)
end
Services.RS:BindToRenderStep("Cam", Enum.RenderPriority.Camera.Value+1, function()
Camera.CameraType = "Scriptable"
Base = CFrame.new(Pos)+Offset
Camera.CFrame = Base
Pos = Lerp(Pos, Char.PrimaryPart.Position, ({Services.RS.Stepped:Wait()})[2]*10) --Update, Stepped is the physics per frame, Update*Speed
end)