как запретить двигаться в одну сторону во время передвижения

Здраствуйте) Нужно запретить игроку двигаться в одну сторону во время передвижения в другую. Вот код:

void Update()
{
    float h = 0f;
    yPos = 0;

    if (Input.GetKeyDown (KeyCode.W))
    {
        h = 1;
        zPos = h * speed * -1;
        model.transform.eulerAngles = new Vector3(0, 0, 0);
    }
    else if (Input.GetKeyDown(KeyCode.S))
    {
        h = 1;
        zPos = h * speed;
        model.transform.eulerAngles = new Vector3(0, 180, 0);
    }
    else if (Input.GetKeyDown(KeyCode.D))
    {
        h = 1;
        xPos = h * speed * -1;
        model.transform.eulerAngles = new Vector3(0, 90, 0);
    }
    else if (Input.GetKeyDown(KeyCode.A))
    {
        h = 1;
        xPos = h * speed;
        model.transform.eulerAngles = new Vector3(0, -90, 0);
    }
    else if (Input.GetKeyUp(KeyCode.W))
    {
        h = 0;
        zPos = h * speed;
    }
    else if (Input.GetKeyUp(KeyCode.S))
    {
        h = 0;
        zPos = h * speed;
    }

    if (Input.GetKeyUp(KeyCode.D))
    {
        h = 0;
        xPos = 0;
    }
    else if (Input.GetKeyUp(KeyCode.A))
    {
        h = 0;
        xPos = 0;
    }
   
     obj.transform.Translate(new Vector3(Time.deltaTime * xPos, Time.deltaTime * yPos, Time.deltaTime * zPos));
}

Пробовал сделать так:

        float h = 0f;
        float n = 0f;
        yPos = 0;


        switch (State)
        {
            case "Idle":
                h = 0;
                n = 0;
                zPos = 0;
                xPos = 0; 
                yPos = 0;
                break;
            case "W":
                n = -1;
                h = 0;
                zPos = n * speed;
                model.transform.eulerAngles = new Vector3(0, 0, 0);
                break;
            case "A":
                n = 0;
                h = 1;
                xPos = h * speed;
                model.transform.eulerAngles = new Vector3(0, -90, 0);
                break;
            case "S":
                n = 0;
                h = 1;
                zPos = h * speed;
                model.transform.eulerAngles = new Vector3(0, 180, 0);
                break;
            case "D":
                n = 0;
                h = -1;
                xPos = h * speed;
                model.transform.eulerAngles = new Vector3(0, 90, 0);
                break;
            case "Space":
                break;
        }
                    

        if (Input.GetKeyDown (KeyCode.W))
        {
            State = "W";
        }
        else if (Input.GetKeyDown(KeyCode.S))
        {
            State = "S";
        }
        else if (Input.GetKeyDown(KeyCode.D))
        {
            State = "D";
        }
        else if (Input.GetKeyDown(KeyCode.A))
        {
            State = "A";
        }
        else if (Input.GetKeyUp(KeyCode.W) ^ Input.GetKeyUp(KeyCode.A) ^ Input.GetKeyUp(KeyCode.S) ^ Input.GetKeyUp(KeyCode.D))
        {
            State = "Idle";
        }

        if (Input.GetKeyDown(KeyCode.Space) && isGrounded)
        {
            fizic.AddForce(Vector3.up * jump);
        }

        Debug.Log(n.ToString() + " " + h.ToString());

        obj.transform.Translate(new Vector3(Time.deltaTime * xPos, Time.deltaTime * yPos, Time.deltaTime * zPos));
    }

Но почему то не работает, а логи выводят всё правильноЛоги


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

Автор решения: ZZZ

Один из вариантов

private float Axis(KeyCode PositiveButton, KeyCode NegativeButton, int Positive, int Negative)
{
    if (Input.GetKey(PositiveButton) && Input.GetKey(NegativeButton))
       //Что будет происходить если мы нажимаем две разные кнопки
    else if (Input.GetKey(PositiveButton))
       return Positive;
    else if (Input.GetKey(NegativeButton))
       return Negative;

    //Тут пишешь что будет происходить когда ничего не нажато
}

Затем когда хочешь задать угол то пишешь

model.transform.eulerAngles = new Vector3(0, Axis(KeyCode.W, KeyCode.S, 0,  180), 0);

//Первые это две кнопки на которые нужно будет нажимать, а два последних значения это градусы
→ Ссылка