※ 이상의 BP와 이하의 C++의 작동 방식은 차이가 크니 메커니즘 참고용으로만 사용할 것
// 재정의(Override)할 함수
virtual void NotifyActorBeginOverlap(AActor* OtherActor) override;
void AEnemy::NotifyActorBeginOverlap(AActor* OtherActor)
{
APlayerPawn* playerRef = Cast<APlayerPawn>(OtherActor);
if (playerRef) // 형변환 실패 시 실행 안됨 (nullptr)
{
OtherActor->Destroy();
this->Destroy();
}
}
// 바인딩(Binding)할 함수. 이름 바꿔도 됨
UFUNCTION() // 델리게이트 함수는 지정자 필수
void OnMyComponentBeginOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);
// 델리게이트 바인딩 (보통 Begin Play에서 함)
boxComp->OnComponentBeginOverlap.AddDynamic(this, &AEnemy::OnMyComponentBeginOverlap);
// 함수 몸체
void AEnemy::OnMyComponentBeginOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
{
if (OtherActor->IsA(APlayerPawn::StaticClass())) // IsA()는 형변환 성공 여부를 bool로 반환함
{
OtherActor->Destroy();
this->Destroy();
}
}