Некоторые пункты для начала:
- , убедитесь, что onGroundis true.=> добавьте
Debug.Log($"is on ground {onGround}")
перед if и проверьте его. - Убедитесь, что код находится в цикле Update () (вы можете установить его также в FixedUpdate, но обновление лучше)
Тогда я вижу проблему логики.Вот что происходит в вашем коде:
- вы на земле
- вы прибавляете скорость и продвигаетесь вверх
- вас больше нет на земле
- если не получается, вертикальная скорость останавливается, потому что вы больше не на земле
- игрок отступает
Чтобы решить эту проблему, замените эту строку:
rb.velocity = new Vector2(rb.velocity.x, jumppower);
При этом:
rb.AddForce(new Vector2(0, jumppower), ForceMode2D.Impulse);