본문 바로가기

게임프로그래밍/실습1

[언리얼 실습] 59. 에너미가 플레이어 발견시 반응하기


목차

  1. Pawn Sensing Component
  2. 캐릭터 발견시 함수 호출하기

1. Pawn Sensing Component

 

이제 에너미가 플레이어를 발견하면 추적하게 하고 싶다. 에너미가 캐릭터를 보기 위해서는 Pawn Sensing Component가 필요하다.

 

C++에서 이를 만들어보자.

 

UPROPERTY(VisibleAnywhere)
class UPawnSensingComponent* PawnSensing;

 

이것을 이제 실제 생성자에서 만들어주어야 한다.

 

PawnSensing = CreateDefaultSubobject<UPawnSensingComponent>(TEXT("PawnSensing"));
PawnSensing->SightRadius = 4000.f;
PawnSensing->SetPeripheralVisionAngle(45.f);

 

VisionAngle을 기본 45도로 설정하였고 시야 최대 거리는 4000.f (40m)로 설정하였다.

 

이제 에너미가 플레이어를 보면 어떤 반응을 보일지 함수로 만들어보자.


2. 캐릭터 발견시 함수 호출하기

 

캐릭터를 봤을때 무엇인가 작동한다는 것은 그것이 델리게이트로 보내져서 콜백함수를 호출하는 로직일 가능성이 매우 높으며 여기서도 마찬가지이다.

 

UFUNCTION()
void PawnSeen(APawn* SeenPawn);

 

델리게이트로 부르기 위해서는 언리얼 리플렉션 시스템에 노출시킬 필요가 있다.

void AEnemy::PawnSeen(APawn* SeenPawn)
{
	UE_LOG(LogTemp, Display, TEXT("Pawn Seen"));
}

 

함수는 일단 로그를 출력하는 것만 구현하였다. 이제 이것을 바인딩 하자

 

void AEnemy::BeginPlay()
{
	Super::BeginPlay();
	
    // 생략

	if (PawnSensing)
	{
		PawnSensing->OnSeePawn.AddDynamic(this, &AEnemy::PawnSeen);
	}
}

 

바인딩을 했으니 이제 감지가 되나 확인해보자.

 

정상적으로 로그가 뜨는 것을 볼 수있다.