📌 오늘의 TIL: 프로젝타일과 애니메이션 제어 관련 문제 해결
- 🎯 문제 상황
- 액티브 스킬을 사용했을 때 프로젝타일 발사와 애니메이션 동작을 제어하는 과정에서 문제가 발생.
- 스킬 발동 시 기존 애니메이션이 중단되지 않고 계속 실행됨.
- 프로젝타일 관련 코드와 애니메이션 트리거 간의 충돌로 인해 스킬 효과가 기대대로 적용되지 않음.
- 🔍 문제 원인
- Animator 상태 충돌:
- Any State에서 Attack 상태로 전환하는 구조가 애니메이션 동작을 중단하지 않고 중복 실행되도록 함.
- Animator 트리거 관리 미흡:
- Animator.ResetTrigger와 Animator.SetTrigger가 적절히 관리되지 않아서 상태가 중복 실행됨.
- 스킬 실행 플래그 부재:
- 스킬 사용 중인지 체크하는 플래그가 없어, 애니메이션이 반복 실행되거나 충돌 발생.
- Animator 상태 충돌:
- 🔧 해결 방법
- Animator 상태 초기화:
- Animator.ResetTrigger("2_Attack")로 기존 애니메이션 트리거 초기화 후, Animator.SetTrigger("2_Attack")로 상태 전환.
- 스킬 플래그 추가:
- isSkillActivated 플래그를 활용해 스킬 실행 중일 때 다른 동작이 중복 실행되지 않도록 제어.
- 디버깅 로그 추가:
- AnimatorStateInfo를 활용해 애니메이션 상태를 디버깅하고 현재 상태를 정확히 확인.
- 상태 머신 재설계:
- Any State를 남발하지 않고, 명시적 상태 전환 설계로 변경해 상태 충돌 방지.
- 프로젝타일 제어 개선:
- 프로젝타일 생성과 스킬 발동 애니메이션을 독립적으로 처리하도록 로직 분리.
- Animator 상태 초기화:
- 💡 오늘 배운 점
- Animator 상태 관리를 제대로 하지 않으면 애니메이션 충돌이 발생할 수 있음.
- Animator.ResetTrigger와 Animator.SetTrigger의 적절한 사용이 중요함.
- 스킬이나 특수 효과는 플래그를 활용해 중복 실행을 방지해야 안정적으로 동작함.
- Any State는 간편하지만 명시적 상태 전환이 더 안전하고 유지보수에 유리함.
- 🔗 적용한 코드
- PlayerBattle와 SkillEffectManager에 디버깅 로그 추가.
- 스킬 플래그(isSkillActivated)를 활용한 중복 방지.
- AnimatorStateInfo로 현재 상태를 디버깅해 문제 확인.
- 🙋 해결 이후 결과
- 액티브 스킬 사용 시 애니메이션 중단 후 다시 실행되며, 프로젝타일 발사도 정상 동작.
- 애니메이션 상태 충돌 문제 해결.
- 스킬 동작과 기본 공격 간의 충돌이 방지됨.
결론
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 |