Can someone please teach me how to make a BodyVelocity Train?

I was figuring out how to make a BodyVelocity train for Months I did make a BodyVelocity train but the problem is that it’s not realistic enough when the train moves it’s very stiff as if it was a boat here’s what I’m talking about

I’ve tried using values to make it better but it’s too complicated

And every time I use body Gyro it freaks out and when it goes on vertical slopes it doesn’t tilt

while true do
wait()
if script.Parent.Throttle == 1 then
script.Parent.BodyVelocity.Velocity = script.Parent.CFrame.LookVector*30
end
if script.Parent.Throttle == 0 then
script.Parent.BodyVelocity.Velocity = Vector3.new(0,0,0)
end
if script.Parent.Throttle == -1 then
script.Parent.BodyVelocity.Velocity = script.Parent.CFrame.LookVector*-30
end
end

Are there any tips on how to improve my body velocity train?

I tried using that too but when it moves it’ll eventually stop then you have to start it up again

make a loop that checks if the BodyForce is there

---lets say you already made a variable for the BodyForce
repeat wait() until BodyForce == nil
if BodyForce == nil then
---Make another BodyForce
end

the BodyForce also needs to be made using

game.Debris:AddItem(BodyForce,how long before it dissapears)

The script doesn’t work

while true do
wait()
if script.Parent.Throttle == 1 then
BodyForce.Force = script.Parent.CFrame.LookVector*50000
end
if script.Parent.Throttle == 0 then
end
if script.Parent.Throttle == -1 then
BodyForce.Force = script.Parent.CFrame.LookVector*-50000
end
end

repeat wait() until BodyForce == nil
if BodyForce == nil then
game.Debris:AddItem(BodyForce,5)
end

BodyForce = script.Parent.BodyForce