Почему сравнение в моем операторе if влияет на результат - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь добавить функцию прыжка в мою игру, и третья часть моего оператора if влияет на то, насколько высок прыжок, вместо этого, гарантируя, что вы подпрыгнете.Например, если я поставлю 2 вместо 1.001f, он будет высоко прыгать, но если он равен 1.1, он едва прыгнет.Кроме того, 1.001 не работает вообще.

public float jumpForce = 300f;

Этот код не имеет перехода

if (Input.GetKey("space") && rb.position.y < 1.001f)
    {
        rb.AddForce(0, jumpForce * Time.deltaTime, 0, ForceMode.VelocityChange);
    }

Этот код выполняет небольшой переход

if (Input.GetKey("space") && rb.position.y < 1.1f)
    {
        rb.AddForce(0, jumpForce * Time.deltaTime, 0, ForceMode.VelocityChange);
    }

И этот код выполняет высокий прыжок

if (Input.GetKey("space") && rb.position.y < 2f)
    {
        rb.AddForce(0, jumpForce * Time.deltaTime, 0, ForceMode.VelocityChange);
    }

1 Ответ

0 голосов
/ 21 февраля 2019

Как уже упоминалось в комментариях, просто чем выше ваш порог, тем чаще линия будет выполняться до того, как будет достигнута пороговая высота => сила будет добавляться чаще.

Чтобы избежать этого, вам следует толькосделайте прыжок один раз, например, на GetKeyDown вместо этого и добавьте фиксированное усилие вместо использования Time.deltaTime как

if(Input.GetKeyDown(KeyCode.Space) && rb.position.y < 1.001f)
{
    rb.AddForce(0, jumpForce, 0, ForceMode.VelocityChange);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...