1) Почему нахождение на лестнице не вызывает остановку анимации падения?
Вангую на персонаже висит скругленный коллайдер - это от него. Прикол в том, что даже если вам кажется, что персонаж не движется, в Rigidbody2D со скруглённым коллайдером при условии, что вы стоите скруглённой частью на острие или другом круге, то постоянно возникает небольшое ускорение вниз, которое фейлит ваше условие:
if (rb.velocity.y < 0f && !onGround)
{
animator.SetBool("isFall", true);
}
if (rb.velocity.y == 0) // вот это вот условие
{
animator.SetBool("isFall", false);
}
По идее, должно хватить условия "onGround":
animator.SetBool("isFall", !onGround);
2) Почему прыжок с лестницы выше, чем с земли?
Высота разная, потому что вы применяете к персонажу именно силу, ведь она напрямую учитывается в пересчётах. Более того, высота может быть другой, если вы будете прыгать ещё от углов, стоя на месте или скользя вниз или вверх.
Есть много решений, вот два рандомных:
1. Обнулить вертикальную часть вектора velocity перед применением силы:
void Jump() {
if (Input.GetKeyDown(KeyCode.Space) && onGround && !jumpLock) {
rb.velocity = new Vector2(rb.velocity.x, 0);
rb.AddForce(new Vector2(0f, jumpForce));
}
}
2. Вообще заменить силу на мгновенное изменение скорости:
void Jump() {
if (Input.GetKeyDown(KeyCode.Space) && onGround && !jumpLock) {
rb.velocity = new Vector2(rb.velocity.x, jumpForce);
}
}
3) Почему персонаж скатывается с угла?
Потому что стоит скругленной частью на угле. Замените коллайдер. Можете взять квадрат и слегка скруглить края, чтобы при горизонтальном движении не ударялся о стыки текстур (если такая проблема у вас вдруг вообще возникнет).