##History Lesson (not really)
Ok, so more than a year later I’ve had the need to come back and attempt to fully understand this problem (as I never really understood what the differences were). After staring at the formulae for a long time and not really getting anywhere, I decided to stare at the page linked by @jchangxu (thanks btw!). After a short while, one phrase jumped out at me: Think of it as ‘Force exerted per second’
Instantly I realised I understood the differences. It’s actually really simple, but everyone makes it sound so complicated that you assume it’s more complicated than it really is. Since no one has yet managed to explain it clearly, here’s my attempt from the viewpoint of someone who’s only just figured it out.
Incidentally: The official documentation could do with a better explanation since the current explanation in the docs is crappy and doesn’t actually tell you anything unless you do the maths yourself, and even then the maths alone doesn’t tell you everything about the function.
##tl;dr (…or “The Boy That Couldn’t Be Bothered”)
ForceMode.Force == Force per second
ForceMode.Impulse == Force per frame
There’s no actual difference in the way Force and Impulse apply the forces, only in how they calculate the amount of force to apply. If you do Force once every FixedUpdate for exactly one second, you will have applied the same amount of total force as doing Impulse on just one frame.
##Longer Explanation (for maximum understandings)
The real difference is that Force treats the force parameter as Newtons and Impulse treats the force parameter as Newton-seconds, but we don’t need to understand that to have a good understanding of how to use the function.
Force is calculated as:
Acceleration = Force * Time ^ 2 / Mass
Thus if the object has a mass of 2, you apply a force of 40 and the fixed timestep is left at the default of 0.02, it will look like this:
Acceleration = 40 * (0.02 * 0.02) / 2
Acceleration = 40 * 0.0004 / 2
Acceleration = 0.016 / 2
Acceleration = 0.008
So the object will gain 0.008 metres per second of velocity. In other words, it will accelerate by 0.008m/s.
Impulse is calculated as:
Acceleration = Force * Time / Mass
Thus if the object has a mass of 2, you apply a force of 40 and the fixed timestep is left at the default of 0.02, it will look like this:
Acceleration = 40 * 0.02 / 2
Acceleration = 0.8 / 2
Acceleration = 0.4
So the object will accelerate by 0.4m/s.
Notice that 0.4 is exactly 50 * 0.008 (50 being the default number of timesteps in a second). That’s because Force treats your force input as force per second, whereas Impulse treats your force input as force per timestep.
The other two ForceModes, Acceleration and VelocityChange, are even simpler because they leave mass out of the equation.
Acceleration is calculated as:
Acceleration = Force * Time ^ 2
Thus, regardless of the object’s mass, if you apply a force of 40 and the fixed timestep is left at the default of 0.02, it will look like this:
Acceleration = 40 * (0.02 * 0.02)
Acceleration = 40 * 0.0004
Acceleration = 0.016
So the object will accelerate by 0.16m/s.
VelocityChange is calculated as:
Acceleration = Force * Time
Thus, regardless of the object’s mass, if you apply a force of 40 and the fixed timestep is left at the default of 0.02, it will look like this:
Acceleration = 40 * 0.02
Acceleration = 0.8
So the object will accelerate by 0.8m/s.
And finally, it’s worth saying it again, just to be clear: no matter which ForceMode you choose, the force will not be applied on subsequent frames automatically. It will only be applied at the instant you call the function. The difference is simply in how it calculates how much force to apply, not in how it applies the force.