Object moves faster going in the diagonal

I made a little player script by myself to make my player move, but I wanted the speed to be cut in half when he is moving in the diagonal because it has double the value of whenever he is going in a straight line. How would that be possible?

void Update()
    {
        Vector3 direction = new Vector3(Input.GetAxisRaw("Horizontal") * moveSpeed * Time.deltaTime, Input.GetAxisRaw("Vertical") * moveSpeed * Time.deltaTime );
        gameObject.transform.position = gameObject.transform.position + direction;  
    }

>Solution :

but I wanted the speed to be cut in half when he is moving in the diagonal because it has double the value of whenever he is going in a straight line

No, actually it will be up to times √(2) 😉

You want to be using Vector3.ClampMagnitude in order to always have a maximum magnitude of 1f for your input:

void Update()
{
    var input = new Vector3(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
    gameObject.transform.position += Vector3.ClampMagnitude(direction, 1f) * moveSpeed * Time.deltaTime;  
}

Leave a Reply