# Please explain me this line of code

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)