Normalize scales all the values down so the max value is one. So if x=1 and z=1 you would essentially be moving at a speed of 1.4(square root of 2) instead of 1 in the x or z direction.
Since normalizing the movement vector results in a movement vector that is always 1 in length, you lose the granularity/interpolation functionality of an analog stick, so I would like to refer to the following Unity forum post: https://forum.unity.com/threads/diagonal-movement-speed-to-fast.271703/
…where I found the solution to my similar problem, when using the analog stick on my controller.
Quote from cranky:
Normalizing [the movement vector] isn’t always the best
solution. If you’re using a keyboard,
it’s fine. But with an analog stick,
it will always force the length of the
vector to be 1, so you won’t be able
to move slowly. Instead, get the
length of the vector and see if it’s
greater than 1. If so, divide the
movement vector by the length.
…and also (quoting myself)…
Make sure the “Sensitivity” of your
analog stick axes is set to no more
than 1! Mine were set to 2 for some
reason (damn copy/pasting from old
projects), so even when using cranky’s
fix, I had inputs of (1f, 1f) when
within ~30 degrees of either diagonal,
while holding the stick to its
extremity. This made me think there
might be some input-multiplier…and
voila, sensitivity was the culprit.