[Unreal]#14_AI controller 생성 및 세팅
Unreal 개발 중 "AI Controller"에 대해 알아보겠습니다.
"Simple Shooter Game"의 AI Player 개발 내용입니다.
AI Controller 클래스
1. AI Controller 클래스 생성
1. 우 클릭 -> 새로운 C++ 클래스 생성
2. 모든 클래스 -> AIController를 부모 클래스로 설정
2. C++ 클래스를 상속하는 블루프린트 클래스 생성
1. 우 클릭 -> 블루 프린트 클래스 생성
2. 부모 클래스로 앞서 생성한 AI 클래스(C++)를 부모 클래스로 설정합니다.
3. Auto Possess AI 지정
1. Character 블루프린트 에디터 창
2. Pawn 탭에 있는 "Auto Possess AI" 항목을 "Placed In World or Spawned"로 변경해줍니다.
3. AI 컨트롤러 클래스를 위에서 생성한 BP_AIC로 설정합니다.
4. Play 중 AI 캐릭터 생성 여부 확인
AI 캐릭터의 Focal Point와 회전
1. AI 캐릭터가 포커싱할 대상 가져오기
// AShooterAIController.h 내부...
#pragma once
#include "CoreMinimal.h"
#include "AIController.h"
#include "ShooterAIController.generated.h"
UCLASS()
class SIMPLESHOOTERNEW_API AShooterAIController : public AAIController
{
GENERATED_BODY()
public:
virtual void BeginPlay() override;
virtual void Tick(float DeltaSeconds) override;
private:
class APawn* PlayerPawn;
};
// AShooterAIController.cpp 내부 BeginPlay 구현부
void AShooterAIController::BeginPlay()
{
Super::BeginPlay();
PlayerPawn = UGameplayStatics::GetPlayerPawn(GetWorld(), 0);
}
static APawn * GetPlayerPawn ( const UObject * WorldContextObject, int32 PlayerIndex )
특정 Player Index의 Pawn을 반환합니다!
2. AI 캐릭터가 Focusing할 대상 설정
// AShooterAIController.cpp 내부 Tick 구현부
void AShooterAIController::Tick(float DeltaSeconds)
{
Super::Tick(DeltaSeconds);
SetFocus(PlayerPawn);
}
void AAIController::SetFocus(AActor* NewFocus, EAIFocusPriority::Type InPriority)
Focal Point의 대상이 될 Actor를 설정합니다.
3. 플레이 화면 체크
Nav Mesh 세팅
1. Nav Mesh Bound Volume 설치
1. Nav Mesh Bound Volume
AI 액터의 움직임을 허용하는 공간을 지정합니다. 주변 장애물들을 피해서 AI가 이동할 수 있도록 해줍니다.
2. AIController 클래스 -> Path Following Component
Nav Mesh 를 찾아주는 컴포넌트로, 해당 Nav Mesh 위로 자동으로 길을 찾아서 AI 액터를 이동할 수 있도록 도와줍니다.
2. MoveToActor
void AShooterAIController::Tick(float DeltaSeconds)
{
Super::Tick(DeltaSeconds);
SetFocus(PlayerPawn);
MoveToActor(PlayerPawn, 200);
}
EPathFollowingRequestResult::Type AAIController::MoveToActor( AActor* Goal, float AcceptanceRadius, bool bStopOnOverlap, bool bUsePathfinding, bool bCanStrafe, TSubclassOf<UNavigationQueryFilter> FilterClass, bool bAllowPartialPaths )
Goal(목표 지점) Actor를 지정하고, 허용 가능한 범위(Nav Mesh가 깔려있는) 안에서 해당 Actor를 향해 이동합니다!
'게임개발 > Unreal C++' 카테고리의 다른 글
[Unreal]#15_Line Of Sight, Acceptance Radius of AI (0) | 2022.10.02 |
---|---|
[Unreal]#15_FText, FString, FName (0) | 2022.09.27 |
[Unreal]#13_State Machine, 상태 기계 (0) | 2022.08.29 |
[Unreal]#12_Aim Offset(Pitch 값 설정), Delta Rotator 활용 (0) | 2022.08.29 |
[Unreal]#11_Blend Pose By Boolean, BlueprintPure (0) | 2022.08.29 |