본문 바로가기

TIL(Today I Learned)/오늘 무엇을 배웠을까

TIL(Today I Learned) - 69

📌 오늘의 TIL: 프로젝타일과 애니메이션 제어 관련 문제 해결


  1. 🎯 문제 상황
    • 액티브 스킬을 사용했을 때 프로젝타일 발사와 애니메이션 동작을 제어하는 과정에서 문제가 발생.
    • 스킬 발동 시 기존 애니메이션이 중단되지 않고 계속 실행됨.
    • 프로젝타일 관련 코드와 애니메이션 트리거 간의 충돌로 인해 스킬 효과가 기대대로 적용되지 않음.

  1. 🔍 문제 원인
    • Animator 상태 충돌:
      • Any State에서 Attack 상태로 전환하는 구조가 애니메이션 동작을 중단하지 않고 중복 실행되도록 함.
    • Animator 트리거 관리 미흡:
      • Animator.ResetTrigger와 Animator.SetTrigger가 적절히 관리되지 않아서 상태가 중복 실행됨.
    • 스킬 실행 플래그 부재:
      • 스킬 사용 중인지 체크하는 플래그가 없어, 애니메이션이 반복 실행되거나 충돌 발생.

  1. 🔧 해결 방법
    • Animator 상태 초기화:
      • Animator.ResetTrigger("2_Attack")로 기존 애니메이션 트리거 초기화 후, Animator.SetTrigger("2_Attack")로 상태 전환.
    • 스킬 플래그 추가:
      • isSkillActivated 플래그를 활용해 스킬 실행 중일 때 다른 동작이 중복 실행되지 않도록 제어.
    • 디버깅 로그 추가:
      • AnimatorStateInfo를 활용해 애니메이션 상태를 디버깅하고 현재 상태를 정확히 확인.
    • 상태 머신 재설계:
      • Any State를 남발하지 않고, 명시적 상태 전환 설계로 변경해 상태 충돌 방지.
    • 프로젝타일 제어 개선:
      • 프로젝타일 생성과 스킬 발동 애니메이션을 독립적으로 처리하도록 로직 분리.

  1. 💡 오늘 배운 점
    • Animator 상태 관리를 제대로 하지 않으면 애니메이션 충돌이 발생할 수 있음.
    • Animator.ResetTrigger와 Animator.SetTrigger의 적절한 사용이 중요함.
    • 스킬이나 특수 효과는 플래그를 활용해 중복 실행을 방지해야 안정적으로 동작함.
    • Any State는 간편하지만 명시적 상태 전환이 더 안전하고 유지보수에 유리함.

  1. 🔗 적용한 코드
    • PlayerBattle와 SkillEffectManager에 디버깅 로그 추가.
    • 스킬 플래그(isSkillActivated)를 활용한 중복 방지.
    • AnimatorStateInfo로 현재 상태를 디버깅해 문제 확인.

  1. 🙋 해결 이후 결과
    • 액티브 스킬 사용 시 애니메이션 중단 후 다시 실행되며, 프로젝타일 발사도 정상 동작.
    • 애니메이션 상태 충돌 문제 해결.
    • 스킬 동작과 기본 공격 간의 충돌이 방지됨.

결론

Animator와 스킬 로직의 충돌은 디버깅과 상태 관리를 통해 해결할 수 있으며, 상태 머신 설계와 트리거 관리의 중요성을 다시 한 번 배울 수 있었습니다. 😊

'TIL(Today I Learned) > 오늘 무엇을 배웠을까' 카테고리의 다른 글

TIL(Today I Learned) - 71  (0) 2024.12.31
TIL(Today I Learned) - 70  (1) 2024.12.30
TIL(Today I Learned) - 68  (0) 2024.12.26
TIL(Today I Learned) - 67  (0) 2024.12.24
TIL(Today I Learned) - 66  (0) 2024.12.23