[Unreal]#16_Behavior Tree Setting
Unreal 개발 중 "AI Controller"에 대해 알아보겠습니다.
"Simple Shooter Game"의 AI Player 개발 내용입니다.
Setting
1. Behavior Tree + Bloackboard 블루프린트 생성
2. ShooterAIController.h
// Fill out your copyright notice in the Description page of Project Settings.
#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:
UPROPERTY()
class APawn* PlayerPawn;
private:
// UBehaviorTree 유형의 변수 설정 및 Editor에 노출
UPROPERTY(EditDefaultsOnly)
class UBehaviorTree* AIBehaviorTree;
};
- UBehaviorTree 유형을 가리키는 포인터 변수를 데이터 멤버로 설정합니다.
3. BP_ShooterAIController
- 앞서 C++에서 노출시킨 AIBehaviorTree 포인터 변수를 에디터에서 설정해줍니다.
4. BT_EnemyAI
- Blackboard Asset을 BB_EnemyAI로 지정합니다.
4. ShooterAIController::BeginPlay()
void AShooterAIController::BeginPlay()
{
Super::BeginPlay();
if(AIBehaviorTree != nullptr)
RunBehaviorTree(AIBehaviorTree);
}
bool AAIController::RunBehaviorTree(UBehaviorTree* BTAsset)
- UBehaviorTree 유형을 가리키는 포인터 변수가 유효한지 검사하고, 실행합니다.
Blackboard
1. ShooterAIController::BeginPlay()
//...
#include "BehaviorTree/BlackboardComponent.h"
void AShooterAIController::BeginPlay()
{
Super::BeginPlay();
PlayerPawn = UGameplayStatics::GetPlayerPawn(GetWorld(), 0);
if(AIBehaviorTree != nullptr)
{
RunBehaviorTree(AIBehaviorTree);
// Bloackboard Component Setting Here
GetBlackboardComponent()->SetValueAsVector(TEXT("Player Location"), PlayerPawn->GetActorLocation());
}
}
1. GetBlackboardComponent()?
UBlackboardComponent* GetBlackboardComponent() { return Blackboard; }
- AIController의 Blackboard 컴포넌트를 가져옵니다. BT_EnemyAI의 블랙 보드를 가져오겠죠!
2. SetValueAsVector()?
void UBlackboardComponent::SetValueAsVector(const FName& KeyName, FVector VectorValue)
- 특정 FName을 갖는 Key에 값을 설정합니다.
3. 결과 화면
'게임개발 > Unreal C++' 카테고리의 다른 글
[Unreal]#18_Custom Behavior Tree Task (0) | 2022.10.05 |
---|---|
[Unreal]#17_Behavior Tree (1) | 2022.10.04 |
[Unreal]#15_Line Of Sight, Acceptance Radius of AI (0) | 2022.10.02 |
[Unreal]#15_FText, FString, FName (0) | 2022.09.27 |
[Unreal]#14_AI controller 생성 및 세팅 (0) | 2022.09.17 |