как сделать подъем на уступ Unity2d у меня есть код ниже, но он не очень хорош, но работает

#unity3d #game-development

Вопрос:

нужна помощь с этим кодом подъема по уступу. я хочу, чтобы мой плеер переключился с pos1(который находится сбоку от выступа) на pos2(который находится над выступом) после завершения анимации подъема по выступу и не хотел прерываться между бегом, прыжком или простоем. Я хочу приостановить физику до завершения анимации и переключения положения игрока

 private void CheckLedgeClimb()
    {
        if (ledgeDetected amp;amp; !canClimbLedge amp;amp; rb.velocity.y < 0 )
        {
            canClimbLedge = true;
            if (isFacingRight)
            {
                ledgePos1 = new Vector2(Mathf.Floor(ledgePosBot.x   wallCheckDistance) - ledgeClimbXOffset1, Mathf.Floor(ledgePosBot.y)   ledgeClimbYOffset1);
                ledgePos2 = new Vector2(Mathf.Floor(ledgePosBot.x   wallCheckDistance)   ledgeClimbXOffset2, Mathf.Floor(ledgePosBot.y)   ledgeClimbYOffset2);
            }
            else
            {
                ledgePos1 = new Vector2(Mathf.Ceil(ledgePosBot.x - wallCheckDistance)   ledgeClimbXOffset1, Mathf.Floor(ledgePosBot.y)   ledgeClimbYOffset1);
                ledgePos2 = new Vector2(Mathf.Ceil(ledgePosBot.x - wallCheckDistance) - ledgeClimbXOffset2, Mathf.Floor(ledgePosBot.y)   ledgeClimbYOffset2);
            }

            anim.SetBool("canClimbLedge", canClimbLedge);
        }
        if (canClimbLedge)
        {
            transform.position = ledgePos1;
        }

    }

    public void FinishLedgeClimb()                           // calling this function from unity animation events after last sprite. 
    {
        canClimbLedge = false;
        ledgeDetected = false;
        transform.position = ledgePos2;
        anim.SetBool("canClimbLedge", canClimbLedge);
    }
    #endregion

    #region Raycasts
    private void CheckSurroundings()
    {
        isGrounded = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, whatIsGround);
        isTouchingWall = Physics2D.Raycast(wallCheck.position, direction, wallCheckDistance, whatIsGround);  // transform.right
        isTouchingLedge = Physics2D.Raycast(ledgeCheck.position, direction, wallCheckDistance, whatIsGround);

        if (isTouchingWall amp;amp; !isTouchingLedge amp;amp; !ledgeDetected)
        {
            ledgeDetected = true;
            ledgePosBot = wallCheck.position;
        }
    }