What's the best way to maintain multiple BodyMovers with the same classes in a single part?

I write this topic to seek help from others, even though there are very few existing threads talking about it (in other ways).

I had been thinking of creating additional type for my kart racing’s boost pad, “Forward”. This idea was inspired by what exists in non-Roblox game “Kartrider”, and its function is when player’s kart steps on it, the kart will be forcefully pushed forward with direction based on booster’s normalized and facing vector (X, _, Z axes) for short duration. (note that boost velocity blends current velocity of the kart)


I attempted to get it working by instancing new “BodyVelocity” or “LinearVelocity” to the kart hitbox with this code:

local ForwardDebounce = false
local MiniDebounce = false
local JumpDebounce = false
local StunDebounce = false

local function ForwardBoost(direction, boostPower, boostDuration)
    ForwardDebounce = true
    Values.IsForwardBoosting.Value = true
    local bodyVelocity = Instance.new("LinearVelocity")
    bodyVelocity.Name = "ForwardBoost"
    bodyVelocity.MaxForce = math.huge
    direction = Vector3.new(direction.X, 0, direction.Z).Unit
    local Velocity = (direction * boostPower)
    bodyVelocity.VectorVelocity = Vector3.new(Velocity.X,  bodyBelocity.VectorVelocity.Y, Velocity.Z)
    bodyVelocity.Parent = Main.Hitbox
    --Thread:Wait(boostDuration)
    local StartTime = os.clock() repeat Thread:Wait() until (os.clock() - StartTime) >= boostDuration
    Values.IsForwardBoosting.Value = false
    bodyVelocity:Destroy()
    ForwardDebounce = false
end

I expected to see it doing well, it was overridden by existing BodyMover (Velocity)
In alternate method, I used AssemblyLinearVelocity, which was working, but only lasted very short time and not helpful much.
So the topic title says it all. I repeatedly ask you guys if there is better way to help me dealing with this.

P/S: merging boost and engine velocities into one would not be helpful for me to solve this

If you want to get around this, these are your options:

  1. I see you mention this option is not helpful, but I’m not sure why it wouldn’t be. Use only one body velocity for all the movement. When you want to boost, get that body velocity and simply increase the numbers.

  2. If you would rather be working with different instances and creating a new body mover instance when the player hits the boost, you need to use body forces because they’re additive (you can use multiple on a single instance and they will sum to produce a single force vector). This means replacing the other body velocity you’re using with a body force.

I forgot to tell you that using BodyForce is also not useful, as it requires a large number to achieve. I put a huge value to its force, and the kart did not seem to move.

Now ignore the two options you provided, I recently found my solution by moving cloned BodyMovers to another part, which never has existing ones. This sounds weird but definitely works