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

Спасибо за ответы

Мой код:

private void Update() {

    if (Input.GetKeyDown(KeyCode.Space) && isGrounded) Jump();
}

private void FixedUpdate()
{
    isGrounded = Physics.CheckSphere(groundCheck.position, 0.2f, groundMask);
}

private void Jump()
    {
        rigidbody.AddForce(Vector3.up * 20, ForceMode.VelocityChange);
        isGrounded = false;
    }
2
זיו שיאון 11 Фев 2021 в 14:18

1 ответ

Лучший ответ

Прежде всего, любые расчеты физики, касающиеся Rigidbody (например, в вашем Jump()), всегда должны выполняться внутри функции FixedUpdate() в соответствии с документацией Unity здесь. FixedUpdate() запускается с фиксированной частотой по умолчанию каждые 0,02 секунды, тогда как Update() запускается один раз за кадр, что будет отличаться для каждой машины, на которой он работает.

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

private bool shouldJump = false;

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space) && isGrounded)
    {
       shouldJump = true;
    }
}

void FixedUpdate()
{
    // Check for jump
    if (isGrounded && shouldJump)
    {
        shouldJump = false;

        rigidbody.AddForce(Vector3.up * 20.0f, ForceMode.VelocityChange);
    }
}
0
RStevoUK 11 Фев 2021 в 13:36