Не работает изменение скорости unity

Вот есть скрипт, в котором есть 2 действия, изменяющие скорость - бег и приседание. Но почему - то всегда работает только одно из них, а другое игнорируется. В чем дело?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour
{
    public float speed;
    public Transform camera;

private void Update()
{

    if (Input.GetKey(KeyCode.LeftShift) && !Input.GetKey(KeyCode.LeftControl))
    {
        speed = 15;
        if (Input.GetKey(KeyCode.S))
            speed = 6;
    }
    else
    {
        speed = 6;
    }
    if (Input.GetKey(KeyCode.LeftControl) && !Input.GetKey(KeyCode.LeftShift))
    {
        camera.localPosition = new Vector3(0, -2, 0);
        speed = 0;
    }
    else
    {
        camera.localPosition = new Vector3(0, 0, 0);
        speed = 6;
    }
    if (Input.GetKey(KeyCode.W))
    {
        transform.localPosition += transform.forward * speed * Time.deltaTime;
    }
  }

}

В консоли ничего


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

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

Если правильно понял о чем речь и проблема в том, что ты пытаешься увеличить скорость и присесть одновременно, то ошибка в логике условий (ниже в коде цитирую их), поэтому оба действия и не могут быть выполнены:

if (Input.GetKey(KeyCode.LeftShift) && !Input.GetKey(KeyCode.LeftControl))
if (Input.GetKey(KeyCode.LeftControl) && !Input.GetKey(KeyCode.LeftShift))
→ Ссылка
Автор решения: sddgfdff

Проблема решилась, когда сделал эти изменения кода:

if (Input.GetKey(KeyCode.LeftShift))
    {
        speed = 15;
        if (Input.GetKey(KeyCode.S))
            speed = 6;
    }
    else if(!Input.GetKey(KeyCode.LeftShift))
    {
        speed = 6;
    }

    if (Input.GetKey(KeyCode.LeftControl))
    {
        camera.localPosition = new Vector3(0, -2, 0);
        speed = 2;
    }
    else if (!Input.GetKey(KeyCode.LeftControl))
    {
        camera.localPosition = new Vector3(0, 0, 0);
    }
→ Ссылка