Input.GetKeyDown не работает, когда я вызываю его дважды - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь позволить кубу упасть в единство, когда я вызываю Input.GetKeyDown("space"), и когда куб отбрасывается, второй куб генерируется и сбрасывается снова при нажатии пробела, однако, когда я нажимаю его снова, онне работает, вот мой код

void Update () 
{
    if (Input.GetKeyDown("space"))
    {
        if (!ss)
        {
            shabi.useGravity = true;
            shabi.AddForce(0, 0, -100);
            ss = true;
        }
    }

    if (cube1.transform.position.y == y)
    {
        if (!singleExecution)
        {
            Rigidbody newCube = spawn();
            <b>if (Input.GetKeyDown("space")) //THE PART THAT DOESN'T WORK</b>
            {
                Debug.Log("sb");
                newCube.useGravity = true;
                newCube.AddForce(0, 0, -100);
            }
            y++;
            //cubeY += 2;
            singleExecution = true;
        }
    }
}

Функция spawn() используется для генерации другого куба, а вторая Input.GetKeyDown не работает, спасибо за ответ на мой вопрос

1 Ответ

0 голосов
/ 11 октября 2018

Я думаю, что проблема на самом деле уже лежит в строке раньше:

if(cube1.transform.position.y == y)

Поскольку ваш первый объект использует гравитацию, каковы шансы, что позиция в одном кадре соответствует точно y?Кроме того, сравнение двух значений float может никогда не совпадать, даже если значение должно быть одинаковым, для получения дополнительной информации см. Math.Approximately.

Это почти никогда не будет верным, поэтому ваш коддаже не достигает Input части.

Теперь вы можете, конечно, использовать

if(Math.Approximately(cube1.transform.position.y, y)

, пытаясь найти точное значение y, но шансы, которые соответствуют этому на бесплатнойпадающие объекты все еще очень малы!

Вместо этого вы должны использовать качественное сравнение, например <=.Вы можете использовать более широкое приближение, используя разницу между двумя значениями (в этом примере оно совпадает, когда объект меньше, чем +-10cm appart от ожидаемого y):

if(cube1.transform.position.y - y <= 0.1f)

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

if(cube1.transform.position.y <= y)

Это, очевидно, зависит от того, что именно ваша цель здесь.

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