Why to Normalize movement in game dev

Hernando Nieto Jaramillo
2 min readJul 14, 2022

--

After some time in game dev, I found that using Normalize() or normalized was really necessary, but I didn’t understand why. Here a brief explanation.

Requirements:

You need to know what is:

  • Vector
  • Magnitude
  • Pythagoras theorem

Movement in game dev

Let’s analyze a 2D movement

When the player presses the up button, the object moves 2 units upwards (A), and for the right button (B), also it moves 2 units to the right (it’s an example). Both A and B are vectors.

But what happens when the objects moves in diagonal (X)?

X is the magnitude, and it’s calculated through the Pythagoras theorem.

The value of X in this case is 2.8

In that case, we can deduce, understand, that the object will be faster when moving in diagonal.

If a multiplier is applied, the values increase scalarly.

The solution: normalized

The objective of Normalize() or normalized is to set X = 1

How?

Dividing each variable by the magnitude (X)

If you apply the Pythagoras theorem here, you’ll find this

Why?

After “Normalizing” the user input when moving diagonally, the movement value (magnitude: X vector value) will be 1 by reducing the vector values of A and B.

It also applies for 3D vectors — Vector 3

But when pressing only the up or right button, the movement value of each vector A or B will be 1.

So, after using Normalize() or normalized, you can apply a multiplier to the movement input.

Example

Vector3 direction = (player.position — enemy.position).normalized;
Vector3 playerPos = (player.position + direction) * speed;

--

--