create a part, then set the camerasubject to this part
in a function bound to render step with camera.priority + 1:
lerp the part to rootPart.Position + rootPart.CFrame.LookVector * offset
(adjust offset as needed)
or you can also look into camera spring modules i think ive seen before
--untested pseudocode
local RunService = game:GetService("RunService")
local cameraPart = Instance.new("Part", workspace)
cameraPart.Size = Vector3.new(1,1,1)
RunService:BindToRenderStep(Enum.RenderPriorty.Camera.Value + 1, function()
local targetPosition = rootPart.Position + rootPart.CFrame.LookVector * 2 -- adjust the 2 as needed
local newPosition = cameraPart.Position:Lerp(targetPosition, 0.5) -- adjust the 0.5 as needed
cameraPart.Position = newPosition
end)