Unity Hit애니메이션 반복과 Dead 애니메이션 전환 문제 해결

김보근·2024년 10월 7일
0

Unity

목록 보기
92/113

HIT 애니메이션 반복과 Dead 애니메이션 전환 문제 해결

문제 상황

게임에서 적과 플레이어가 충돌할 때마다 HIT 애니메이션이 반복적으로 실행되고, 캐릭터의 health가 0 이하로 떨어져도 Dead 애니메이션이 제대로 실행되지 않는 문제가 발생했다.

문제 원인

HIT 애니메이션 반복 실행: 충돌 시마다 OnHit()이 호출되면서 HIT 애니메이션이 계속 반복되었다. 이를 방지하려면 일정 시간 동안은 추가로 OnHit()이 호출되지 않도록 해야 했다.

Dead 애니메이션 미실행: DeadState로 전환하는 코드가 있었지만, 죽음 상태에서도 충돌 처리가 계속 발생해 Dead 애니메이션이 제대로 전환되지 않았다. 충돌이 계속 발생하면서 DeadState로 넘어가지 못하고, 이전 상태에서 애니메이션이 반복됐다.

해결 방법

HIT 애니메이션 문제 해결: isHit 플래그와 Coroutine을 사용해 HIT 애니메이션이 한 번 실행된 후 0.5초 동안 추가로 실행되지 않도록 처리했다. 이를 통해 일정 시간 동안 OnHit()가 다시 호출되지 않도록 막았다.

private bool isHit = false;

if (!isHit)
{
    OnHit();
    isHit = true;
    StartCoroutine(ResetHitAfterDelay(0.5f));
}

private IEnumerator ResetHitAfterDelay(float delay)
{
    yield return new WaitForSeconds(delay);
    isHit = false;  // 0.5초 후 다시 HIT이 가능하도록 설정
}

Dead 애니메이션 문제 해결: isDead 플래그를 추가하여 캐릭터가 죽은 이후에는 충돌 처리가 더 이상 발생하지 않도록 제어했다. isDead 플래그 덕분에 죽은 이후에는 상태 전환이 중복으로 이루어지지 않아 DeadState로 정확히 넘어가도록 했다.

private bool isDead = false;

if (GameManager.Instance.health <= 0 && !isDead)
{
    GameManager.Instance.health = 0;
    stateMachine.SetState(new DeadState(stateMachine, animator, gameObject));
    isDead = true;  // Dead 상태를 한 번만 실행하게 하기
}

느낀점

애니메이션이나 상태 전환이 반복적으로 실행되는 문제를 해결할 때는 상태를 추적하는 플래그(isHit, isDead 등)를 적절히 사용하여 조건을 제어하는 것이 중요하다. 특히 충돌이 지속적으로 발생하는 상황에서는 플래그를 통해 상태 전환이 한 번만 이루어지게 해야 한다는 것을 배웠다.

profile
게임개발자꿈나무

0개의 댓글