1. 현상

분명 동일한 대상을 공격하는데 Player를 적중했다는 로그는 맨 첫 공격에만 출력되고 있습니다.
void ABoss::OnAttackStarted()
{
LOG(TEXT("Begin"));
AttackCollision->SetCollisionEnabled(ECollisionEnabled::QueryOnly);
bIsAttacking = true;
}
void ABoss::OnAttackEnded()
{
LOG(TEXT("Begin"));
AttackCollision->SetCollisionEnabled(ECollisionEnabled::NoCollision);
bIsAttacking = false;
}
void ABoss::OnMeshOverlapBegin(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp,
int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
{
LOG(TEXT("Mesh Overlap Begin with!: %s"), *OtherActor->GetName());
if (bIsAttacking)
{
if (OtherActor->ActorHasTag("Player"))
{
LOG(TEXT("Mesh Overlap Begin with Player!"));
bIsAttacking = false;
}
}
}
분명 공격을 시작할 때에는 Collision을 활성화하고 공격 플래그도 활성화 했는데 뭐가 문제인지 도무지 모르겠더라구요.
2. 원인
혹시 프레임 차이로 콜리전이 먼저 활성화 되고 오버랩 이벤트를 판정한 후에 공격 플래그가 활성화 되는 건 아닐까 하는 마음에 콜리전 활성화 부분과 공격 플래그 활성화 순서를 바꿔봤습니다.
void ABoss::OnAttackStarted()
{
LOG(TEXT("Begin"));
bIsAttacking = true;
AttackCollision->SetCollisionEnabled(ECollisionEnabled::QueryOnly);
}
void ABoss::OnAttackEnded()
{
LOG(TEXT("Begin"));
bIsAttacking = false;
AttackCollision->SetCollisionEnabled(ECollisionEnabled::NoCollision);
}
결과

아니나 다를까 제 예상이 적중했습니다.. 프레임 차이로도 이런 문제가 발생할 수 있네요.. 코드 순서 작성에 신경 써야겠습니다.
'언리얼 엔진 > 트러블슈팅' 카테고리의 다른 글
| [언리얼엔진] Material Parameter 수정 (0) | 2025.04.08 |
|---|---|
| [언리얼엔진] LevelSequence 스폰 유지 (0) | 2025.04.08 |
| [언리얼엔진] 루트 모션 재생하기 (0) | 2025.04.05 |
| [언리얼엔진] Socket 활용해서 MuzzleOffset 찾기 (0) | 2025.02.19 |
| [언리얼엔진] AI 액터 회전 시 끊기는 문제 (0) | 2025.02.18 |