본문 바로가기
언리얼5 & C++

[Unreal 5, C++] 적 AI 생성하기 : 2 / 적이 나를 조준하게 하기

by 17번 일개미 2022. 6. 28.
728x90

이번 글에서는 적 캐릭터가 내 캐릭터를 조준하도록 만드는 방법을 알려줄 것이다.

적이 나를 조준하기 위해선 플레이어를 인식하고, 플레이어의 위치를 바라보도록

적의 몸을 회전시켜 주어야 할 것이다.

 

STEP 1 : 

// EnemyAIController.h

class PISTOL_API AEnemyAIController : public AAIController
{
	GENERATED_BODY()
protected: // << 중요
	virtual void BeginPlay() override;
};

저번에 AIController가 게임 실행 시 생성되는 것 까지 했었다.

그렇다면 생성되고 난 직후에, 무엇을 할지를 정해야한다.

Actor 클래스에 있는 BeginPlay()를 오버라이드 하여 정의해 줄 것이다.

 

EnemyAIController.cpp

cpp 파일에 이제 함수를 구현할 것이다.

 

#include "Kismet/GameplayStatics.h" // GetPlayerPawn을 사용하기 위해

void EnemyAIController::BeginPlay()
{
    Super::BeginPlay();
	// 폰 변수를 만들고 플레이어 인덱스(0)로 플레이어 폰을 저장
    APawn* PlayerPawn = UGameplayStatics::GetPlayerPawn(GetWorld(), 0);
}

 

UGamePlayStatics:: 를 사용하기 위해서 반드시 Kismet/GameplayStatics.h 를 include 해주어야 한다.

Return 타입이 APawn* 형태인 GetPlayerPawn() 함수를 통해 World의 0번째 플레이어 인덱스를 가진

플레이어의 Pawn을 가져온다.

 

void AEnemyAIController::BeginPlay()
{
    Super::BeginPlay();
    // 폰 변수를 만들고 플레이어 인덱스(0)로 플레이어 폰을 저장
    APawn* PlayerPawn = UGamePlayStatics::GetPlayerPawn(GetWorld(), 0);

    SetFocus(PlayerPawn); // 플레이어 폰의 위치로 SetFocus
}

 

PlayerPawn 으로 SetFocus 함수를 써주면 된다.

SetFocus 함수는 AIController.h에 선언되어 있다.

 

Focus할 대상과 우선순위를 받는 것으로 보인다.

cpp 파일로 가서 SetFocus 를 뜯어보면

 

 

대충 이렇게 생겼다. 우선순위에 맞게 대상에게 초점을 맞추는 형식이다

 

AAIController::SetFocus | Unreal Engine Documentation

 

AAIController::SetFocus

Set Focus actor for given priority, will set FocalPoint as a result.

docs.unrealengine.com

빌드 후

여기까지 하고 게임을 실행시켜보면,

 

 

적 캐릭터가 플레이어의 움직임에 따라 회전하는 것을 확인 할 수 있다.

728x90