You can use TweenService and tween a CFrameValue, then set the model’s position to it. Here’s a simple example with a LocalScript, since the game is one player only there shouldn’t be any problems.
local TweenService = game:GetService("TweenService")
local RunService = game:GetService("RunService")
local Character = script.Parent
local Model = workspace.Model
local CFrameValue = Model.CFrameValue
local Info = TweenInfo.new(.5)
CFrameValue.Changed:Connect(function()
Model:PivotTo(CFrameValue.Value*CFrame.fromEulerAnglesXYZ(Character:GetPivot():ToEulerAnglesXYZ()))
end)
while true do
local Tween = TweenService:Create(
CFrameValue,
Info,
{Value = CFrame.new(Character:GetPivot().p.X-5, 0, Character:GetPivot().p.Z)}
)
Tween:Play()
Tween:Destroy()
RunService.RenderStepped:Wait()
end