Что нужно что бы все заработало:
1) Скопировать код.
2) Объект на котором висит Rigidbody должен иметь этот скрипт и коллайдер (обязательно 2д, не триггер)
3) Пол (то, с чем соприкасается объект игрока) должен иметь Layer "Ground" и коллайдер2д (не триггер)
Суть в том, что при вводе вы должны запоминать факт ввода клавиши прыжка и игнорировать его до приземления (для этого использован метод OnCollisionEnter2D)
Исходя из этого дополните Ваш пример как Вам угодно.
public class PlayerController : MonoBehaviour
{
Rigidbody2D m_Rigidbody;
readonly Vector2 force = new Vector2(50, 50);
bool inAir;
private void Start()
{
m_Rigidbody = GetComponent<Rigidbody2D>();
}
void Update()
{
if (Input.GetKey(KeyCode.Space) && !inAir)
{
inAir = true;
m_Rigidbody.AddForce(force);
}
}
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.layer == LayerMask.NameToLayer("Ground"))
inAir = false;
}
}