There are 4 ForceModes for AddForce, which I almost understand, but it’s implied through most tutorials that the only difference is the resulting magnitude of the “force”. But what if I want an actual force (actually impulse) to be applied, not velocity change? For example, if I apply a force on an arm, and it’s holding a 10-pound bowling ball, it shouldn’t move nearly as fast as if it were holding a 1-pound bowling ball, and it shouldn’t move at all if it’s blocked by a wall. Nowhere in the AddForce or ForceMode documentation does it talk about whether the “force” actually functions as a real force (actually, impulse) for the physics engine. In fact it’s all implied it always boils down to a change in velocity, and even the one that’s influenced by the object’s own mass has nothing to say about the mass of objects it could be colliding with. If the arm weighs 0 pounds and is blocked by a 1-ton truck, it should still not be moved by a lot of “force”.
AddForce always applies a force, regardless of the ForceMode applied. The difference between force modes lies in how the force magnitude is calculated. In all cases, only the properties of the rigidbody are considered for the calculations. Applying a force may cause a change in velocity (Newton’s first law of motion).
For example, using ForceMode.VelocityChange will apply a force magnitude that should result in the specified change in the velocity given the mass of the Rigidbody. But it doesn’t consider whether that rigidbody is being affected by other objects, or if it’s colliding with something.
So if the rigidbody is blocked, or it’s supporting some other object, then it would move slower or even don’t move at all, regardless of the ForceMode applied.