Unity 2D Почему мой персонаж каждый раз прыгает на разную высоту?

#c# #unity3d

#c# #unity3d

Вопрос:

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

вот мой код:

 public bool onGround = false;
public float JumpHeight;
public Rigidbody2D gravidade;
// Start is called before the first frame update
void Start()
{
    
}



// Update is called once per frame
void Update()
{
    if (onGround == true)
    { 
        if (Input.GetKey(KeyCode.Space))
        {
            gravidade.AddForce(new Vector2(0, JumpHeight * Time.deltaTime), ForceMode2D.Impulse);
         
        }
    }
}
void OnCollisionEnter2D(Collision2D outro)
{
    if (outro.gameObject.CompareTag("ground"))
    {
        onGround = true;
    }
}
void OnCollisionExit2D(Collision2D outro)
{
    if (outro.gameObject.CompareTag("ground"))
    {
        onGround = false;

    }
}
 

Комментарии:

1. поскольку временная дельта меняется — вы применяете одноразовую силу, а не непрерывное движение, поэтому, я думаю , вам следует просто исключить дельту?

Ответ №1:

Вы не должны умножать на дельта-время при применении одноразовой силы.

Ответ №2:

Time.deltaTime это время завершения в секундах с момента последнего кадра. Проверьте документацию

Это время не является постоянным. Единоличное поведение.FixedUpdate использует fixedDeltaTime вместо deltaTime, это fixedDeltaTime и FixedUpdate обычно используются для физики, и это довольно сложная тема.

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

Комментарии:

1. Обратите внимание, что вы можете и, согласно документам, должны использовать deltaTime и в FixedUpdate, потому что на устройстве, где исправленные обновления просто не могут выполняться достаточно быстро (или во время задержек, которые иногда возникают на любой машине), deltaTime будет правильно адаптироваться, в то время как fixedDeltaTime буквально постоянен (за исключением определяемого пользователем влиянияпо шкале времени). Однако вы правы, как и @Piggy, сказал, что одноразовые силы не следует масштабировать.

Ответ №3:

Это отличается от того, что оно вычисляется исходя из deltaTime, которое не совпадает (время между двумя отображаемыми кадрами, если я не ошибаюсь), и каждый раз оно дает немного другое значение, которое в сочетании с умножением имеет большее отклонение от среднего. Надеюсь, я помог прояснить это, приветствия!