Не спринт во время приседания? - PullRequest
0 голосов
/ 18 ноября 2018

Так что я на начальной стадии создания игры FPS, и я только что реализовал функцию спринта и приседания (приседание только замедляет игрока в данный момент).функции просто таковы:

private void sprintInput()
{

    if (Input.GetKeyDown(sprintKey))
    {           
        movementSpeed *= 2f;
    }
    if (Input.GetKeyUp(sprintKey))
    {          
        movementSpeed /= 2f;
    }
}


private void crouchInput()
{
    if (Input.GetKeyDown(crouchKey))
    {           
        movementSpeed /= 2f;
    }
    if (Input.GetKeyUp(crouchKey))
    {
        movementSpeed *= 2f;
    }
}

Как бы ни было написано это, они, очевидно, могут быть активированы обеими одновременно.Но я хочу, чтобы Крауч перезаписал спринт.Поэтому, если я использую спринт и приседание одновременно, активируется только приседание.Я пробовал несколько методов, но ничего не работает, я уверен, что упускаю что-то до боли очевидное, я просто не знаю, что.

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

Принятый ответ фактически делает вашу игру уязвимой.Игрок будет нажимать спринт (скорость x2), нажимать приседать (скорость / 2), отпускать спринт ( ничего не происходит ), затем отпускать приседать (скорость x2), что постоянно удваивает его скорость.

Более правильный подход, я думаю, будет хранить оба флага:

bool isCrouching, isSprinting;
float baseSpeed, movementSpeed;

private void sprintInput {
    if (Input.GetKeyDown(sprintKey)) {        
        isSprinting = true;
        UpdateSpeed ();
    }
    if (Input.GetKeyUp(sprintKey)) {
        isSprinting = false; 
        UpdateSpeed ();
    }
}

private void crouchInput {
    if (Input.GetKeyDown(crouchKey)) {        
        isCrouching = true;
        UpdateSpeed ();
    }
    if (Input.GetKeyUp(crouchKey)) {
        isCrouching = false; 
        UpdateSpeed ();
    }
}

private void UpdateSpeed () {
    movementSpeed = isCrouching ? baseSpeed / 2
                  : isSprinting ? baseSpeed * 2
                  :               baseSpeed;
}
0 голосов
/ 18 ноября 2018

Установите булеву переменную на true / false, когда крадущийся или нет.

bool isCrouching;

private void crouchInput()
{
    if (Input.GetKeyDown(crouchKey))
    {        
        isCrouching = true;   
        movementSpeed /= 2f;
    }
    if (Input.GetKeyUp(crouchKey))
    {
        isCrouching = false; 
        movementSpeed *= 2f;
    }
}

Вы можете использовать эту переменную, чтобы убедиться, что вы не крадулись перед спринтом:

private void sprintInput()
{
    if (!isCrouching  && Input.GetKeyDown(sprintKey))
    {           
        movementSpeed *= 2f;
    }
    if (!isCrouching && Input.GetKeyUp(sprintKey))
    {          
        movementSpeed /= 2f;
    }
}

Модификатор спринта будет доступен для активации только в том случае, если кнопка / кнопка приседания не используется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...