본문 바로가기
[ Unreal5 ]/- 언리얼엔진5 실습

언리얼엔진5 c++ BehaviorTree(Blackboard Set, Ai Move)

by MRG 2024. 4. 27.
728x90
반응형

 

 

▣ 먼저 Behavior Tree와 Blackboard를 생성합니다. 

각각 이름 앞에 BT, BB를 붙여서 어떤 파일인지 의도에 맞게 작성합니다.

 

▣ 비헤이비어 트리는 블루프린트와 유사한 시각적 방식으로 생성됩니다. 비헤이비어 트리 그래프(Behavior Tree Graph)에 기능이 탑재된 다양한 노드를 추가하고 연결하는 방식입니다. 비헤이비어 트리가 로직을 실행하는 한편, 비헤이비어 트리가 결정을 내리는 데 필요한 정보인 블랙보드 키(Blackboard Key)는 블랙보드(Blackboard)라는 별도의 에셋에 저장됩니다. 일반적인 워크플로는 블랙보드를 생성하고, 블랙보드 키를 추가한 다음, 블랙보드 에셋을 사용하는 비헤이비어 트리를 생성하는 순서입니다. 블랙보드는 아래 이미지에서처럼 비헤이비어 트리에 할당됩니다.

 

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/behavior-tree-in-unreal-engine---overview?application_version=5.3

 

언리얼 엔진의 비헤이비어 트리 - 개요

언리얼 엔진의 비헤이비어 트리 개념과 전통적인 비헤이비어 트리와의 차이점에 대해 설명합니다.

dev.epicgames.com

 

 

▣ Behavior Tree창에 가서 디테일탭에서 아까 생성한 Blackboard으로 설정합니다. 

 

 

▣ AiController c++ 코드에서 Behavior Tree에 대한 데이터를 저장할 변수를 선언합니다. 

 

 

▣  cpp 파일로 가서 "BehaviorTree/BehaviorTree.h" 헤더를 추가합니다. 

그리고 ConstructorHelpers::FObjectFinder <UBehaviorTree> 코드로 BT오브젝트를 가져오는 코드를 완성합니다.

여기서 중요한 건 경로 텍스처에 맨 앞에 BehaviorTree가 들어가야 합니다. 

 

▣ BeginPlay()에서 RunBehaviorTree함수를 활용하여 BehaviorTree를 실행하는 코드를 완성합니다.

 

https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/AIModule/AAIController/RunBehaviorTree?application_version=5.3

 

AAIController::RunBehaviorTree

Starts executing behavior tree.

dev.epicgames.com

 

 

▣ 저장 및 컴파일 후 AiController 블루프린트에서 변수가 잘 대입되어 있는지 확인할 수 있고 AiController가 BehaviorTree와 잘 연결되는 것도 확인할 수 있습니다.

 

 

 

▣ 다시. cpp로 돌아가서  #include "BehaviorTree/BlackboardComponent.h" 헤더를 추가하고 

GetBlackboardComponent()->SetValueAsVector 코드로 Blackoard를 세팅하는 함수를 작성합니다. 

이 코드는 Blackboard에 있는 데이터를 플레이어 위치로 세팅하는 코드입니다.

 

https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/AIModule/AAIController/GetBlackboardComponent/2?application_version=5.0

 

AAIController::GetBlackboardComponent

 

dev.epicgames.com

 

https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/AIModule/BehaviorTree/UBlackboardComponent/SetValueAsVector?application_version=5.3

 

UBlackboardComponent::SetValueAsVector

 

dev.epicgames.com

 

 

▣ 컴파일 후 Blackboard로 돌아가서 아까 세팅한 SetValueAsVector함수처럼 동일한 이름과 형식으로 데이터를 추가하고 저장 후

 

 

 

▣ 플레이를 하고 확인하면 Player위치가 세팅되는 걸 확인할 수 있습니다.

 

 

 

▣. cpp파일에서 DefaultLocation를 추가하는데 이건 현재 Ai에 위치를 세팅하는 코드입니다.

 

https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Engine/GameFramework/APlayerState/GetPawn?application_version=5.2

 

GetPawn

Overload list

dev.epicgames.com

 

 

▣ Blackboard에 동일한 Vector 값을 추가합니다. 

 

 

 

▣ Behavior Tree로 가서 Sequence를 먼저 추가하고 Move to와 Wait Tasks를 추가하여 연결합니다. 

말 그래도 Move to 이동, Wait 대기하는 노드입니다.

그리고 Tasks에 Move To는 PlayerLocation과 DefaultLocation로 각각 이동할 위치를 지정합니다.

그럼 Sequence에 기준으로 왼쪽부터 1,2,3,4 이렇게 반복해서 Tasks가 실행됩니다. 

 

 

▣ 저장 후 플레이를 해보면 ai가 계속 이동하는 걸 확인할 수 있습니다. 

728x90
반응형

댓글