Rigidbody slowing right down when colliding only when I'm rotating the velocity to always be going forward

I want the velocity to increase over time, but when the player turns the velocity should be rotated to the players new forward vector.

  void FixedUpdate()
    {
        m_vForce = transform.forward;
    	rigidbody.AddForce(m_vForce * m_fAcceleration);
    	rigidbody.velocity = m_vForce * rigidbody.velocity.magnitude;
    }

This code works, the result is what I’d expect, however the rigidbody slows right down when it is colliding with an object. Without the 3rd line of the function, it doesn’t slow down more than you’d expect it to when colliding with an object. What could be the reason for this?

You shouldnt be modifying velocity directly.

If you’d like to slow down an object add force in the opposite direction.

The whole point of velocity and force is to simulate physics.

velocity direct modification prevents that.

Take 2 cases for example

in one the current velocity is 100 and we set it to 0.

In 1 frame the velocity goes from 100 to 0. Instant stop.

In another the current velocity is 100 and we add a negative velocity of 10.

the object slows to 90 as the current velocity slowly finds it too difficult to overcome the resistance.

In your case you should use add force at point.

it will apply the appropriate torque and force assuming your center of mass is set right.