Unity AddForce Impulse result in zero velocity in the first frame?

I don’t understand why is this happening. Can anyone explain it to me and please suggest how should I do a proper checking on velocity? Right after LaunchHero() code is called I need to check the velocity so that I can show some effect based on its velocity.

// after received input, it will call this function
private void LaunchHero()
{
    isLaunched = true;
    body.AddForce(new Vector3(0.0f, 5.0f, 0.0f), ForceMode.VelocityChange);
}

private void FixedUpdate()
{
   if (isLaunched)
      Debug.Log(body.velocity) // returns 0,0,0 right after LaunchHero() called, the next frame only start returning values
}

The other solution I found is instead of calling AddForce(), I can set body.velocity directly but I was told that I shouldn’t be modifying the velocity.

Any calls to AddForce have effect the next physics update (that is the next fixed frame). The velocity of the rigidbody is then updated based on all the forces, velocity changes and the physics interactions.

This makes more sense in specific situations. Imagine calling LaunchHero, but the rigidbody is currently blocked under a wall. The rigidbody won’t move after calling to AddForce. If you had modified rigidbody.velocity directly then you would have shown an effect based on the velocity, but the hero wouldn’t have moved.

Without knowing more details in your project, I think the correct way would be simply monitoring the velocity of the rigidbody and showing the effect when it has some velocity.

Thanks for your clarification.