Единство на корточках - PullRequest
       12

Единство на корточках

0 голосов
/ 01 августа 2020
        if(Input.GetKeyDown(crouchKey) && isCrouching == false )
    {
        YCrouched();            
    }
    if (Input.GetKeyUp(crouchKey) && isCrouching == true && isInCeiling == false)
    {
        NCrouched();
    }    
}

void YCrouched()
{
    isCrouching = true;
    controller.height = 1f;
    player.gameObject.transform.localScale = new Vector3(0.8f, crouchHeight, 0.8f);
    moveSpeed = crouchSpeed;
}
void NCrouched()
{
    isCrouching = false;
    controller.height = 2f;
    player.gameObject.transform.localScale = new Vector3(1, 1, 1);
    moveSpeed = deafultSpeed;
}

Итак, проблема в том, что когда я выхожу из области, подобной вентиляционному отверстию, где есть потолок, я все равно остаюсь приседать. И только когда я снова приседаю, я возвращаюсь.

Ответы [ 2 ]

0 голосов
/ 02 августа 2020
if (Input.GetKeyUp(crouchKey) && isCrouching == true && isInCeiling == false)
{
    NCrouched();
}

Изменить на

if (isCrouching == true && isInCeiling == false)
{
    NCrouched();
}

Предполагается, что вы отслеживаете isInCeilling

0 голосов
/ 02 августа 2020

Один из способов сделать это - проверить, изменился ли статус inCeiling по сравнению с предыдущим обновлением. Попробуйте добавить следующее

//keeps the previous state of isInCeiling, add this to wherever isInCeiling is defined.
bool wasInCeiling

//add this check to your list of if-checks
if(wasInCeiling == true && isInCeiling == false) 
{
    NCrouched() ;
}

Это должно заставить игрока автоматически вставать всякий раз и только тогда, когда он вылезает из потолка.

Также вам нужно добавить немного кода обновления, поэтому при каждом обновлении вы сначала устанавливаете текущее значение isInCeiling на wasInCeiling, а затем выполняете проверку текущего состояния isInCeiling. Это всегда должно держать wasInCeiling на один кадр позади isInCeiling.

...