AnimNotify와 Tick 사이의 타이밍 오차로 인해
공격이 중복 실행되거나 튀는 현상을 해결한 코드입니다.
논리적 플래그(bIsAttacking) 확인에 앞서 IsAnyMontagePlaying()으로
실제 엔진의 애니메이션 상태를 검증하는 이중 체크(Double Check) 로직을
도입하여 전투의 안정성을 확보했습니다.
//Boss1.cpp
void ABoss1::UseNormalAttack()
{
//이중 상태 체크 (Double State Check)
//1. 엔진 레벨 검증: 실제 애니메이션 몽타주가 재생 중인지 확인
// Notify와 Tick 사이의 미세한 갭(Gap)으로 인한 중복 실행 방지
UAnimInstance* AnimInst = GetMesh()->GetAnimInstance();
if (AnimInst && AnimInst->IsAnyMontagePlaying())
{
return;//가드 클로즈 (Guard Clause)
}
//2. 논리 레벨 검증: 자체 플래그 확인
if (bIsAttacking) return;
//검증 통과 시 공격 실행
bCanNormalAttack = false;
StartAttack();
}