BodyForce doesn't go straight in LookVector direction

I am making this helicopter go straight forward by setting it’s BodyForce’s Force to the helicopter’s LookVector. Like this (forwardForce is 8000 in this case)
BodyForce.Force = main.CFrame.LookVector * forwardForce
This should make the helicopter fly straight foward, where it is facing. However as you can see in the video that’s not really the case.
It does fly roughly in the right direction, but it seems like it’s somehow “drawn” to the nearest world axis. In the video it flies straight along the baseplate’s edge even though the helicopter is facing slightly of the edge.

image
In the main part of the helicotper, which is the one all of the forces are applied to, I also have a BodyVelocity and a BodyGyro. The BodyVelocity is used to go up and down.

I believe this issue is caused by the BodyVelocity, I tried setting the MaxForce of the BodyVelocity to 0 on X and Z, since I only need the Y to go up and down. Like this:
BodyVelocity.MaxForce = Vector3.new(0,math.huge,0)
This way, the helicopter did fly wherever it was actually facing, however now it keeps flying into the direction for ever, it doesn’t stop when I set the force back to 0. The BodyVelocity is what made it stop when I stop applying the force.

Why is the BodyVelocity making it not go where the Helicopter is facing? How can I make it fly where it is actually facing without flying infinitely without stopping?

BodyForce is only for world axes. Try use VectorForce perhaps?

Setting the force to (0, 0, 0) doesn’t make the object stop, but stops applying force to the object. So basically, the object will keep moving due to momentum.

You’ll need to calculate a new force to bring the momentum, or velocity in your case, back down to (0, 0, 0).

I highly recommend you switch to the new AlignOrientation and LinearVelocityConstraint for this.

Also BodyForce controls force not velocity. If you want it to stop then either ypu need to script a PID controller or use the BodyVelocity or LinearVelocityConstraint instead.

Instead

Create an attachment inside the main part of the helicter.

Add an AlignOrientation constraint. Set it up to rotate around the axis Y when you turn left and right.(Note there is a bug with this constraint but it cam be bypassed)

Constraints have ability to have multiple on one assembly and are generally more easy to setup and you can visualize them too.

Use the LinearVelocityConstraint and make sure it os setup on the attachment and that it is relative to the attachment0 . To make the helicopter go forward you need to simply Set the Z Velocitu component to and Positive number exempli gratia (0,0,10) and the plane should move forward.

You can change the Responsiveness to change maximum Jerk and MaxForce changes the maximum acceleration.

Hopefully this helps.