VectorForce acting weirdly and not moving player properly on ground

as you can see in the video
I tried ODM system using VectorForce
I kinda got it working but when every I try to go to a different block it first just falls to the ground before going to the position

and when im on the ground the player barely moves compared to when im in the air

here is the script

local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")

local Player = game.Players.LocalPlayer
local Character: Model = script.Parent
local Mouse = Player:GetMouse()

local Humanoid: Humanoid = Character:WaitForChild("Humanoid")
local RootPart = Character.PrimaryPart
local RootAttachment = Instance.new("Attachment", RootPart)

local Hooks: { [string]: {Position: Vector3?, ForceObject: VectorForce?, Hooked: boolean?, BeamObject: Part?} } = {
	Left = {
		Hooked = false,
		Position = nil,
		ForceObject = nil,
		
		BeamObject = nil
	};
	Right = {
		Hooked = false,
		Position = nil,
		ForceObject = nil,
		
		BeamObject = nil
	}
}

local function AveragePosition(pos1, pos2)
	local averageX = (pos1.X + pos2.X) / 2
	local averageY = (pos1.Y + pos2.Y) / 2
	local averageZ = (pos1.Z + pos2.Z) / 2

	return Vector3.new(averageX, averageY, averageZ)
end

local function Hook(side)
	if Hooks[side].Hooked == true then return end

	if Mouse.Hit then
		local HookPosition = Mouse.Hit.Position

		local VectorForce = Instance.new("VectorForce", RootPart)
		VectorForce.Attachment0 = RootAttachment
		VectorForce.RelativeTo = Enum.ActuatorRelativeTo.World
		
		local HitPositionReference = Instance.new("Part", workspace)
		HitPositionReference.Anchored = true
		HitPositionReference.Position = Mouse.Hit.Position
		HitPositionReference.Transparency = 1
		HitPositionReference.CanCollide = false
		
		local ReferenceAtt = Instance.new("Attachment", HitPositionReference)
		
		local Beam = ReplicatedStorage:WaitForChild("Beam"):Clone()
		Beam.Parent = HitPositionReference
		Beam.Attachment0 = ReferenceAtt
		Beam.Attachment1 = Character[side.."Box"].BeamAtt
		
		Hooks[side].BeamObject = HitPositionReference
		Hooks[side].ForceObject = VectorForce
		Hooks[side].Position = HookPosition
		Hooks[side].Hooked = true
	end
end

local function ReleaseHook(side)
	if Hooks[side].Hooked == false then return end

	if Hooks[side].ForceObject then
		Hooks[side].ForceObject:Destroy()
	end
	if Hooks[side].BeamObject then
		Hooks[side].BeamObject:Destroy()
	end
	Hooks[side].Hooked = false
	Hooks[side].Position = nil
end

UserInputService.InputBegan:Connect(function(input, GPE)
	if GPE then return end

	if input.KeyCode == Enum.KeyCode.Q then
		Hook("Left")
	elseif input.KeyCode == Enum.KeyCode.E then
		Hook("Right")
	end
end)

UserInputService.InputEnded:Connect(function(input, GPE)
	if GPE then return end

	if input.KeyCode == Enum.KeyCode.Q then
		ReleaseHook("Left")
	elseif input.KeyCode == Enum.KeyCode.E then
		ReleaseHook("Right")
	end
end)

RunService.RenderStepped:Connect(function()
	if Hooks["Right"].Hooked == true then
		Hooks["Right"].ForceObject.Force = (Hooks["Right"].Position - RootPart.Position).Unit * workspace.Gravity * 20 
	end
	
	if Hooks["Left"].Hooked == true then
		Hooks["Left"].ForceObject.Force = (Hooks["Left"].Position - RootPart.Position).Unit * workspace.Gravity * 20
	end
end)

can anyone help me with this please? I cant find a solution for this ANYWHERE

I don’t understand could you clarify this statement a bit more? Do you mean you want the user to go directly to the hooked location or you want gravity to affect it? Right now I see that it is working normally if you intend it to work with gravity.

This one I am not too sure why it’s doing that. Maybe it has something to do with the character when it is walking. It is probably using the default walk speed as it is being dragged towards the hook location although this is just a guess. Try increasing the players walk speed when you are hooking and see if it affects the velocity.

I believe that it’s happening because it’s trying to pull you into the ground, and you’re being snapped up by the humanoid (similar to walking into a wall on an angle). Try testing this by enabling PlatformStand in the humanoid before firing the shot and see if it works as intended, you can work on a fix from there.

Look in this video

External Media

in my version the player first drop downs then goes to the hooked point
but in the 2nd clip it just goes straight to the hooked point
instead of dropping down

how to avoid this dropping down thing

can you help me now? please dude

I believe it’s because the 2nd clip uses a more responsive force, basically having less ‘slipping’

what kind of force should I use to make it similar to the second clip

Probably due to humanoids ground friction, try using my character controller out of curiosity to see if it helps as the friction is more adjustable. You can also use the new controller.

Not sure about this, and dont have time.