private IEnumerator Climbing() { isClimbing = true; animator.SetBool("climbing", true); float gScale = rigidbody2D.gravityScale; rigidbody2D.constraints = RigidbodyConstraints2D.FreezePositionX; rigidbody2D.gravityScale = 0; transform.position = touchingLadder.GetNearPosition(transform); Vector2[] bounds = touchingLadder.GetBounds(); while (true) { yield return(null); var input = Input.GetAxisRaw("Vertical"); rigidbody2D.velocity = new Vector2(0, input * speed); if (Input.GetKeyDown(KeyCode.X) || transform.position.y > bounds[0].y || transform.position.y < bounds[1].y) { rigidbody2D.velocity = new Vector2(0, 0); rigidbody2D.constraints = RigidbodyConstraints2D.FreezeRotation; rigidbody2D.gravityScale = gScale; isClimbing = false; animator.SetBool("climbing", false); yield break; } } }