Запретить движение в противоположном направлении

Игра "ЗМЕЙКА" крашится если нажать на кнопку движения в противоположную сторону, как пофиксить?
Как изменить код, чтобы после нажатия "вверх" нельзя было поменять направление на "вниз", а после нажатия "влево" нельзя было поменять направление на "вправо" и наоборот.

private void Update()
    {
        if (Input.GetKeyDown(KeyCode.W))
        {
            _direction = Vector2.up;
        }
        else if (Input.GetKeyDown(KeyCode.S))
        {
            _direction = Vector2.down;
        }
        else if (Input.GetKeyDown(KeyCode.A))
        {
            _direction = Vector2.left;
        }
        else if (Input.GetKeyDown(KeyCode.D))
        {
            _direction = Vector2.right;
        }
    }

Ответы (4 шт):

Автор решения: Yaroslav
private void SetDirection (Vector2Int direction) 
{
    if (_direction != -direction)
        _direction = direction;
}
→ Ссылка
Автор решения: Yotic
private void Update()
    {
        Vector2 direction;

        if (Input.GetKeyDown(KeyCode.W))
            direction = Vector2.up;
        else if (Input.GetKeyDown(KeyCode.S))
            direction = Vector2.down;
        else if (Input.GetKeyDown(KeyCode.A))
            direction = Vector2.left;
        else if (Input.GetKeyDown(KeyCode.D))
            direction = Vector2.right;

         if _direction != -direction {
            _direction = direction
         }
    }
→ Ссылка
Автор решения: Andrew

Как-то так:

private void Update()
{
     SetDirection();
}

private void SetDirection() 
{
    var newDirection = Vector2.zero;
    
    var axisX = Input.GetAxis("Horizontal");
    var axisY = Input.GetAxis("Vertical");
    
    if (axisY > 0.5)
        newDirection = Vector2.up;
    else if (axisY < -0.5)
        newDirection = Vector2.down;
    else if (axisX > 0.5)
        newDirection = Vector2.right;
    else if (axisX < -0.5)
        newDirection = Vector2.left;
    else return;

    if (_direction != -newDirection)
        _direction = newDirection;
}

PS Код писался вслепую и могут быть какие-то логические или синтаксические ошибки.

→ Ссылка
Автор решения: y3x3la
private void Update()
{
    // Only allow turning up or down while moving in the x-axis
    if (direction.x != 0f)
    {
        if (Input.GetKeyDown(KeyCode.W) || Input.GetKeyDown(KeyCode.UpArrow)) {
            direction = Vector2.up;
        } else if (Input.GetKeyDown(KeyCode.S) || Input.GetKeyDown(KeyCode.DownArrow)) {
            direction = Vector2.down;
        }
    }
    // Only allow turning left or right while moving in the y-axis
    else if (direction.y != 0f)
    {
        if (Input.GetKeyDown(KeyCode.D) || Input.GetKeyDown(KeyCode.RightArrow)) {
            direction = Vector2.right;
        } else if (Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.LeftArrow)) {
            direction = Vector2.left;
        }
    }
}

Код был найден тут:
https://github.com/zigurous/unity-snake-tutorial/wiki#how-do-i-prevent-the-snake-from-turning-in-on-itself

→ Ссылка