, если вы хотите физический прыжок, не используйте MovePosition. MovePosition просто переместит твердое тело в положение, зависящее от настроек интерполяции. Поскольку ваша интерполяция равна нулю, вы получаете «очень медленное движение».
Вместо этого вы должны использовать импульсное усилие . Раньше вы только пробовали ускорение силы. Кроме того, ваше горизонтальное движение также должно меняться в зависимости от приближения силы. Попробуйте это так:
void Jump()
{
rb.AddForce(Vector2.up*jumpVelocity, ForceMode2D.Impulse);
}
Чтобы проверить это, вы должны отключить горизонтальное движение на данный момент. Или вы можете сделать что-то вроде этого:
private void Update()
{
float horizontal = Input.GetAxisRaw("Horizontal") * speed * Time.deltaTime;
rb.AddForce(horizontal * Vector2.right);
}
Еще несколько вещей:
-Никогда не проверяйте вход внутри цикла FixedUpdate! Ваша игра может работать со скоростью 100 кадров в секунду, и в зависимости от фиксированного обновления (это называется исправлением, так как Unity пытается сохранить частоту кадров обновления физики), вы можете пропустить нажатие кнопки.
-Если вы используете MovePosition, используйте его только в FixedUpdate.
-Вы, возможно, захотите изменить способ проверки ввода в режиме прыжка, а также проверить, заземлен ли плеер.
- Следует также отметить, что следует избегать использования AddForce для ускорения в обновлении.