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
	Debris:AddItem(Part, 10)
end)

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

4 Likes

MaxForce was definitely the problem! It shoots in a straight directory every time now, thank you so much! :smiley: