# Need a little help with VectorForce

Right now I have 2 Problems:

Note: I have set all of the Character’s descendants to Massless if they are a BasePart.

Problem 1: VectorForce doesn’t seem to be applied in full when another VectorForce is being distributed (happens when I try to dash after jumping).

I’m not really sure why the Force being implemented on the person would change since the Jumping is exclusively on the Y and Dashing on the Z. I don’t know what force would be counteracting the dash.

Context:

Regular Dash:

Dash After Jump:

Problem 2: When the force of Gravity becomes greater than the Jump’s, the VectorForce is pratically just cancelling out Gravity for a small perioid of time instead of accelerating. How can I calculate the current force of Gravity to make the jump more consistent?

I have tried to add Gravity x TotalMass of the Character to the Force variable (but since they’re both constants it didn’t seem to work.)

Context:

Jump before and after Gravitational Force is larger than Jump Force:

FULL SCRIPT:

``````function Movement.Dash(player, t)
if player then
if not table.find(t, player) then -- Used for Debounce
if player.Character then
local HRP = player.Character:FindFirstChild("HumanoidRootPart")
if HRP then
table.insert(t, player) -- Add to debounce table

local Time = 0.75
local Force = 850
local Finished = false

local Attachment = Instance.new("Attachment")
local VectorForce = Instance.new("VectorForce")
VectorForce.Attachment0 = Attachment
VectorForce.RelativeTo = Enum.ActuatorRelativeTo.Attachment0
VectorForce.ApplyAtCenterOfMass = true
VectorForce.Force = Vector3.new(0, 0, -Force)

local Humanoid = player.Character:FindFirstChild("Humanoid")
if Humanoid then
local Animator = Humanoid:WaitForChild("Animator")
local Animation = game:GetService("ServerStorage"):WaitForChild("Animations"):WaitForChild("Movement"):WaitForChild("Dash"):WaitForChild("Dash")
AnimationTrack:Play()
end

Attachment.Parent = HRP
VectorForce.Parent = HRP

if not Finished then
if Humanoid.FloorMaterial == Enum.Material.Air then
VectorForce.Force = Vector3.new(0, 0, -(Force/1.37)) -- Divided by 1.37 to account for Friction (1.37 is just a number that worked for me, no math involved)
else
VectorForce.Force = Vector3.new(0, 0, -Force)
end
else
break
end
end
end)

for i = Force, 0, -Force/10 do
task.wait(Time/10) -- time for dash divided by 10
Force = i
end

VectorForce:Destroy()
Attachment:Destroy()

Finished = true
table.remove(t, table.find(t, player)) -- Used for debounce
end
end
end
end
end

function Movement.DoubleJump(player, t)
if player then
if player.Character then
local Humanoid = player.Character:FindFirstChild("Humanoid")
if Humanoid then
local HRP = player.Character:FindFirstChild("HumanoidRootPart")
if HRP then
local State = Humanoid:GetState()
local WhitelistedStates = {
Enum.HumanoidStateType.Freefall,
}
if table.find(WhitelistedStates, State) then
if not table.find(t, player) then
table.insert(t, player) -- Add to debounce table

local Time = 0.34
local Force = 1080

local Attachment = Instance.new("Attachment")
local VectorForce = Instance.new("VectorForce")
VectorForce.Attachment0 = Attachment
VectorForce.RelativeTo = Enum.ActuatorRelativeTo.Attachment0
VectorForce.ApplyAtCenterOfMass = true
VectorForce.Force = Vector3.new(0, Force, 0)

local Animator = Humanoid:WaitForChild("Animator")
local Animation = game:GetService("ServerStorage"):WaitForChild("Animations"):WaitForChild("Movement"):WaitForChild("Double Jump"):WaitForChild("Double Jump")
AnimationTrack:Play()

Attachment.Parent = HRP
VectorForce.Parent = HRP

for i = Force, 0, -Force/10 do
task.wait(Time/10) -- time for jump divided by 10
VectorForce.Force = Vector3.new(0, i, 0)
end

VectorForce:Destroy()
Attachment:Destroy()

local HitGroundStates = {
Enum.HumanoidStateType.Running
}
local CurrentState
repeat
CurrentState = Humanoid:GetState()
until table.find(HitGroundStates, CurrentState)

table.remove(t, table.find(t, player)) -- Used for debounce
end
end
end
end
end
end
end

return Movement
``````
1 Like

One solution would be to abandon the use of `VectorForce` in favour of a `LinearVelocity` or `BodyVelocity` (which is deprecated/superseded, but still very usable)

These maintain a constant velocity as apposed to having forces counter-acting on it, which makes it very good for dash systems and the like.