How to stop a body mover from gaining speed infinitelya

i have a body position thats costantly setting its position to a parts position + vector3.new(3,0,0) so that it moves. But it jus gets FASTER AND FASTER AND FASTER… How do i set its max speed.

EDIT: Fixed it!

MaxForce?

image
If i set the max force any lower it just doesn’t move

You can add a BodyVelocity and set it’s Velocity to (0, 0, 0). AFAIK it will apply a force opposite the object’s velocity to try and get it to stop completely. That force should be proportional to the current velocity, meaning the faster the object goes the harder the BodyVelocity will try to brake it. That also means small/low speed movements are still possible, because it doesn’t apply much braking force at low speeds. At some point, when the object is going at some speed, the force from the BodyPosition and from the BodyVelocity will cancel out, meaning there will be no more acceleration beyond that and the object will move at a constant speed. Just make sure the MaxForce of the BodyVelocity is higher than the MaxForce of the BodyPosition, otherwise it will never be able to counteract the BodyPosition (I think).

EDIT: Oh, you can also try the new-ish AlignPosition Constraint type: AlignPosition.MaxVelocity It has a MaxVelocity property which might do what you want.

The BodyVelocity trick does slow it down but it still gains speed infinitely…
Also i tried to use AlignPosition but i have no idea how it works and the roblox API refrence says nothing about it.
EDITl: the page does say stuff about align position im just dumb.
It still gets faster and faster! I feel like iv tried everything

Why are you using a BodyPosition for this? The Force it is using is going to just keep increasing since there’s no restriction to it.
Why not use a BodyForce which is a set value, or a VectorForce since that already uses a Vector3?

Iv tried VectorForce, BodyForce, BodyVelocity and LinearVelocity they all just speed up infinitely… Unless im doing something wrong.

BodyForce does seem to work good for what im doing, the only flaw is once again it gains speed infinitely

So you want the Part to spin around another freely moving Part?
Why not use a HingeConstraint?

If it’s for moving an object around a player you might want to search for “pet movement” or something like that using the Search tool up top.
<Help with CFrame + Rotation math for pet movement

like @ThanksRoBama said alignPosition has a property called MaxVelocity, use it.
I use it for my moving platforms in my obby game, you can make it like BodyPosition by setting its Mode = 0 so it uses one attachment instead of two, then set the attachment where you want the part to go.

Its honestly really easy if you learn attachments (but only works consistently on serverside because roblox is a b- nevermind)

anyway you could also make a BodyForce that alternates between Positive, Negative direction. If you apply say Vector3.new(5,0,0) when myPart.AssemblyLinearVelocity < maxVelocity and the opposite for the else condition, you can get the effect to work

PS. your part is not moving because of friction, give it a y-axis bodyforce of ForceMagnitude = myPart.AssemblyMass to make it float. Like BodyForce.Force = Vector3.new(0,ForceMagnitude,0)

Wait, so you’re scripting it to move at Position + vector3.new?
I think (I may be wrong here) if you keep doing this in a loop of course you are going to increase its velocity because you keep adding (3,0,0) to it.
Why not just change the direction by CFrame.Angles(0, math.rad(5 --or whatever angle you want–) ,0))