Input.GetKeyDown должен вызываться из вашей Update()
функции, а физические силы должны применяться в вашей FixedUpdate()
функции.
GetKeyDown верен только для одного кадра, в котором он встречается.
FixedUpdate может или не может работать в течение этого кадра. Итак, никогда не используйте
GetKeyDown (или любой другой аналогичный вариант ввода Вниз и Вверх) в
FixedUpdate.
https://forum.unity.com/threads/fixedupdate-and-input-getkeydown.56862/
например. Это может заставить ваш код выглядеть примерно так:
private bool _jumping;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
_jumping = true;
else if (Input.GetKeyUp(KeyCode.Space))
_jumping = false;
}
void FixedUpdate()
{
if (_jumping) rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
}
Также обратите внимание:
Input.GetKeyDown
Возвращает истину во время кадра, когда пользователь начинает нажимать клавишу
идентифицируется по имени.
https://docs.unity3d.com/ScriptReference/Input.GetKeyDown.html
Input.GetKey
Возвращает true, пока пользователь удерживает нажатой клавишу, указанную по имени.
https://docs.unity3d.com/ScriptReference/Input.GetKey.html
Input.GetKeyUp
Возвращает true в течение кадра, когда пользователь отпускает ключ, обозначенный
название. https://docs.unity3d.com/ScriptReference/Input.GetKeyUp.html
Как я обычно реализую прыжки:
Я склонен использовать GetKeyDown для определения начала прыжка, проверьте, не является ли _jumping
ложным, установите для него значение true.
У меня есть значение с плавающей точкой, которое является моим множителем силы (ваш jumpForce
) для прыжка, который начинается с максимума и уменьшается на протяжении всего прыжка.
Я уменьшаю это в FixedUpdate
до jumpForce = Mathf.Max(jumpForce - jumpDecay * Time.fixedDeltaTime, 0)
.
Если обнаружено Input.GetKeyUp
и _jumping == true
, установите jumpForce = 0
. (хватит прыгать)
При столкновении с землей установите _jumping
в значение false и установите jumpForce = maxJumpForce
.
В FixedUpdate
проверьте, если _jumping
, затем примените силу, используя наш jumpForce
.
Это приводит к тому, что чем дольше вы удерживаете прыжок, тем дольше ваш прыжок, подобно играм, таким как Mario и Hollow Knight