I try to make a topdown game and I know a method that works well but i dont really got it(especially the one in quotation marks).Please help me.

```
float horizontalInput = Input.GetAxis("Horizontal");
float verticalInput = Input.GetAxis("Vertical");
Vector2 movementDirection = new Vector2(horizontalInput, verticalInput);
"float inputMagnitude = Mathf.Clamp01(movementDirection.magnitude);"
movementDirection.Normalize();
transform.Translate(movementDirection * speed *inputMagnitude *movementDirection.magnitude* Time.deltaTime, Space.World);
```

When reading player *Input*, in order to avoid allowing the player to move faster than normal by moving diagonally, accommodations need to be made.

```
The magnitude of a vector is its length, so...
Vector2(1, 1).magnitude = Sqrt(2) = ~1.414
```

*If the player provided diagonal input (1 on each of the horizontal and vertical axes), they would move ~40% faster!*

With that in mind, the code is reducing the *Input* to a total magnitude of 1 in the event that it is greater.

```
float inputMagnitude = Mathf.Clamp01(movementDirection.magnitude);
```

The magnitude is obtained, then reduced down to 1 (*Clamp01()*) if it’s too high.

The *Input* vector is then normalized to a magnitude of 1 and re-multiplied by the “inputMagnitude” variable the guarantee and magnitude between 0 and 1.

That said, there's also a simpler way to do this:

```
Vector2 movementDirection = Vector2.ClampMagnitude(new Vector2(horizontalInput, verticalInput), 1.0f);
```

This will Clamp the magnitude of the vector immediately, rather than separating it into additional steps.

^{(Functionally, this should be no different behind the scenes than the typical, best-case scenario process to avoid as many square root calculations as possible)}