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

언리얼엔진5 c++ BehaviorTree(BTService 생성 및 사용)

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

 

▣ Add Service에서 Set  Default Focus를 추가하여 BehaviorTree에서 Ai에 Focus를 변경할 수 있습니다. 

 

▣ 서비스(Services)는 컴포짓(Composite) 또는 태스크(Task) 노드에 어태치 되며, 분기가 실행 중인 동안 정의된 빈도로 실행됩니다. 보통 블랙보드의 확인과 업데이트에 사용됩니다. 이 노드는 다른 비헤이비어 트리 시스템에서 전통적인 병렬(Parallel) 노드를 대체합니다.

 

▣ Default Focus는 AI 컨트롤러(AI Controller)의 포커스를 설정하여 블루프린트 및 코드의 액터에 액세스 하는 바로가기를 생성합니다. AI 컨트롤러의 포커스를 액터로 설정하면 블랙보드 키에 액세스 하지 않고 AI 컨트롤러에서 직접 액세스 할 수 있습니다.

 

 

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/unreal-engine-behavior-tree-node-reference-services?application_version=5.3

 

언리얼 엔진 비헤이비어 트리 노드 레퍼런스: 서비스

비헤이비어 트리 서비스 노드의 레퍼런스입니다.

dev.epicgames.com

 

 

▣ 이번에는 Service를 직접 생성해 보겠습니다. Blackboard포함된 Base로 생성하겠습니다. 

 

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

 

UBTService_BlackboardBase

 

dev.epicgames.com

 

 

▣ c++ 코드로 가서 BTService.h를 살펴보면 4가지 함수들이 있습니다. 

그중에 TickNode() 함수를 사용합니다. 

 

TickNode()  : 서비스가 활성화된 경로에 있으면 항상 업데이트를 받습니다. 

 

 

▣ 먼저 h 헤더파일로 가서 생성자와 TickNode() 함수를 선언합니다. 

 

 

▣ TickNode() 함수에서 BlackboardKey 값을 조절하는 코드를 작성합니다. 

컴파일 후 

 

 

▣ BehaviorTree에서 Add Service를 누르면 아까 생성한 NodeName으로 Service가 나오고 이걸 선택하여 추가한 다음에 플레이를 해보면 Location에 대한 세팅이 적용되는 걸 확인할 수 있습니다. 

 

 

▣ 하나의 데이터값을 조절할 수도 있고 위에 있는 코드처럼 AiController에 Tick() 함수에 있는 조건문을 가지고 와서 조건문 형식으로도 사용할 수 있습니다. 

 

 

▣ 저장 및 컴파일 후 플레이를 해보면 생성한 Service에 따라 조건이 바뀌는 걸 확인할 수 있습니다. 

 

블랙보드 키(Blackboard Key) 서비스가 결과를 작성할 블랙보드 키입니다. FVector나 액터일 수 있습니다.
간격(Interval) 서비스의 후속 틱 사이에 걸리는 시간을 정의합니다.
랜덤 편차(Random Deviation) 서비스의 간격 값에 랜덤 범위 값을 추가합니다.

728x90
반응형

댓글