# How do you keep BodyVelocity speed the same?

I’m working with BodyVelocity but I understand that the speed of BodyVelocities depends on the ‘distance’ (unless I’m wrong). So my question is, how do I get their speeds to stay the same no matter the distance?

Also when I increase the speed too much the object that the force is parented to starts to curve instead of go in a straight line.

Update: I think the answer I’m really looking for is how to keep it a straight line.

At a speed set at 50, it looks like this

At a speed of 250, it looks like this

all I do is have BodyVelocity.Velocity = CFrame.new(Origin.p, lookAt.p).lookVector * Speed

2 Likes

this code will get the unit vector of the parent part’s CFrame `LookVector` (i.e. a vector of magnitude 1 in the same direction of the part’s CFrame forward-direction component; basically where its `FrontSurface` is facing), multiply it by a constant `Speed`, and set `BodyVelocity.Velocity` to that value:

``````BodyVelocity.Velocity = BodyVelocity.Parent.CFrame.LookVector.unit * Speed
``````

(edited to fix slight typo)

2 Likes

It’s still doing the same thing… let me use a different gif recorder to show you what I mean

Okay, here’s the speed set at 50
https://gyazo.com/948b1988e6fa054b63f80d753c91ea03

and here’s the speed set at 250
https://gyazo.com/eb0650a5a9fc0976e131b1e71ce5f4a0

Here’s some code that should give the result you want:

``````local Mouse = game.Players.LocalPlayer:GetMouse()
local Debris = game:GetService("Debris")

Mouse.Button1Down:connect(function()
local Part = Instance.new("Part")
local PartPosition =  game.Players.LocalPlayer.Character.HumanoidRootPart.Position
Part.Size = Vector3.new(2, 2, 2)
Part.Anchored = false
Part.CanCollide = false
Part.CFrame = CFrame.new(PartPosition, Mouse.Hit.p)

local BodyVelocity = Instance.new("BodyVelocity")
BodyVelocity.Parent = Part
BodyVelocity.Velocity = Part.CFrame.LookVector.unit * 25
BodyVelocity.MaxForce = Vector3.new(math.huge, math.huge, math.huge) -- infinite acceleration !

Part.Parent = game.Workspace
note that the important part in there is really the `BodyForce.MaxForce` bit - this makes it so the `BodyVelocity` can apply an infinite amount of force to get the part moving along the goal velocity vector, meaning gravity, unanchored obstacles, etc. will all have no effect