본문 바로가기
[ CODING STUDY ]/》언리얼엔진5 실습

언리얼엔진5 c++ BehaviorTree(BTTask 생성 및 Character 호출)

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

 

▣ c++ 클래스 생성에서 BTTaskNode를 선택하여 생성합니다. 

블랙보드 키가 필요하지 않을 경우 BTTaskNode로 생성합니다.

 

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/API/Runtime/AIModule/BehaviorTree/UBTTaskNode?application_version=5.3

 

UBTTaskNode

Task are leaf nodes of behavior tree, which perform actual actions

dev.epicgames.com

 

 

 

▣ Build.cs 파일로 가서 "GameplayTasks"를 추가합니다. 

 

 

▣ 그리고 h 헤더파일로 가서 생성자 및 ExecuteTask 함수를 선언합니다. 

 

▣ ExecuteTask : Task가 실행되기 시작할 때 호출되는 함수
▣ AbortTask : 실행을 중단해야 한다고 판단할 때 호출하는 함수 조건함수
▣ TickTask : Task가 실행될 때마다 발생하지만 첫 Task에서는 아닙니다. 첫 번째는 ExecuteTask가 호출됩니다. 그 이후에
▣ OnMessage : 메시지를 보내려 할 때

 

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

 

UBTTaskNode::ExecuteTask

Starts this task, should return Succeeded, Failed or InProgress (use [FinishLatentTask()](API\Runtime\AIModule\BehaviorTree\UBTTaskNode\FinishLatentTask...

dev.epicgames.com

 

 

▣ cpp파일로 가서 필요한 헤더를 선언합니다. 

EnemyCharacter1.h는 가지고 올 적 Ai에 클래스를 선언하시면 됩니다. 

 

 

 

▣ 생성자에서 NodeName에 Task에 NodeName을 지정합니다. 

그리고 GetAiOwner() 함수를 활용하여 AiController에 Owner을 접근하여 얻고자 하는 Pawn이나 Character, Actor를 가져와서 Cast 하는 코드를 작성합니다. 

 

▣ ExecuteTask() 함수에 반환값은 EBTNodeResult::에 맞게 지정합니다. 

Aborted : 중단 완료 = 실패
Failed : 실패로 끝났다.
Succeeded : 성공으로 끝났다.
InProgress : 아직 끝나지 않았다. 진행 중

 

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

 

UBrainComponent::GetAIOwner

 

dev.epicgames.com

 

 

▣ 컴파일 후 BehaviorTree로 돌아가서 아까 생성한 NodeName Fire를 검색하면 Task가 나오고 추가해서 연결합니다. 

 

 

▣ 플레이를 해서 적 AI에 시선에 있으면 Attack 함수가 호출되고 텍스트가 출력되는 걸 확인할 수 있습니다. 

 

 

▣ BlackboardBase 같은 경우 블랙보드 키가 필요한 경우 사용하는 Task입니다. 

아까와 동일하게 생성하고 OwnerComp안을 접근하는데 그 이유는 태스크 클래스는 블랙보드 전체에서 하나밖에 없기 때문에 OwnerCompo을 통해서 공유하기 때문에 OwnerComp 접근하여 GetblackboardComponent() 함수를 접근 그리고 GetSelectedBlackboardKey() 함수로 접근하여 BehaviorTree에서 지정한 BlackboardKey에 값을 가져와 사용할 수 있습니다.  

 

▣ BehaviorTree에서 아까 생성한 BlackboardBase NodeName을 검색하면 나오고 그걸 클릭하면 디테일탭에 BlackboardKey를 선택할 수 있습니다.

 

 

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

 

UBTDecorator_BlackboardBase::GetSelectedBlackboardKey

Get name of selected blackboard key

dev.epicgames.com

 

 

728x90
반응형

댓글