#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;
}
}