Starting with the normalization, it's the process of getting a vector and resizing it to one unit (one meter, one kilometer, whatever you are using). Why this? Because of this equation:
s = v.t
s is space,
v is velocity and
t time. So it tells where your object will be in a given
t delta time when on
But this is for unidimensional space. When you are in 2D space, you can have movement in two dimensions,
y. So your equation is:
S = V.t
V are 2D vectors. When your
V has some speed in
x but zero in
S will result in movement in the
x axis and not on
y. Hence, we can say
V not only tells how fast the object moves, but it also tells which direction it's going, right?
In this case,
V is not called speed anymore, it's called velocity, because it contains a direction and it tells how fast the object moves.
But what would be
direction = playerPosition - mousePosition? It certainly points towards the mouse position, but you can easily see that the farther the mouse position is from player position, the bigger the direction will be. Which means it's more than just the direction, in fact, it's the distance the player should move to get to the mouse position, which is not what you want. You want a direction, and that's why you normalize, to make a vector of magnitude (size) one, so it just represents a direction. And then we have:
s = v.D.t
D is the direction vector. See?
v.D is equal to
V, that is, a scalar
v multiplied by a direction
D, vector of size one, will give you velocity.
The same thought can be applied to force equations, which the
AddForce method uses.
AddForce takes a direction vector and a scalar for the size of this force. But you don't need to normalize
D because you don't use it to apply the force, you use
vector.forward which is a normalized vector.