MyCharacter의 공격 판정 관련 수정 사항입니다.
AttackCheck() 함수가 여러번 호출되는 증상이 있었습니다.
MyCharacter.cpp
void AMyCharacter::Attack()
{
if (Death)
{
GEngine->AddOnScreenDebugMessage(-1, 2.0f, FColor::Red, TEXT("is Death true"));
return;
}
if (IsAttacking)
{
GEngine->AddOnScreenDebugMessage(-1, 2.0f, FColor::Red, TEXT("is attacking true"));
return;
}
EDRAnim = Cast<UAnim_EDR_AnimInstance>(GetMesh()->GetAnimInstance());
if (nullptr == EDRAnim)
{
return;
}
PlayAnimMontage(AttackMontage, 0.5f);
IsAttacking = true;
// 공격 판정 이벤트 중복 등록 방지: 기존에 바인딩된 이벤트가 있으면 제거
EDRAnim->OnAttackHitCheck.RemoveAll(this);
// 공격 판정 이벤트 바인딩
EDRAnim->OnAttackHitCheck.AddUObject(this, &AMyCharacter::AttackCheck);
// 애니메이션 종료 시 공격 끝 처리
EDRAnim->OnMontageEnded.RemoveAll(this); // 중복 바인딩 방지
EDRAnim->OnMontageEnded.AddDynamic(this, &AMyCharacter::OnAttackMontageEnded);
}
// 공격 애니메이션 종료 처리 함수
void AMyCharacter::OnAttackMontageEnded(UAnimMontage* Montage, bool bInterrupted)
{
if (!IsAttacking)
{
return;
}
IsAttacking = false;
// 공격 종료 시 이벤트 해제
if (EDRAnim != nullptr)
{
EDRAnim->OnAttackHitCheck.RemoveAll(this); // 중복 호출 방지
}
GEngine->AddOnScreenDebugMessage(-1, 2.0f, FColor::Red, TEXT("Attack Animation Ended"));
OnAttackEnd.Broadcast();
}
Attack() 함수에서 공격 판정 이벤트 중복 방지 처리를 하였습니다.
반응형
실행 이미지
원래는 2번째 공격부터는 여러번 호출되어 AttackDamage가 여러번 들어가는 증상이 있었는데 해결 된 모습을 볼 수 있습니다.
'Unreal Engine 5 > EDR_Project' 카테고리의 다른 글
EDR_Project / Detect (1) FightMode 설정 (0) | 2024.10.21 |
---|---|
EDR_Project / GameMode (0) | 2024.10.21 |
EDR_Project / Character (3) 공격 판정 (2) | 2024.10.20 |
EDR_Project / TraceChannel (0) | 2024.10.20 |
EDR_Project / Character (2) Collision 프리셋 (0) | 2024.10.20 |