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

언리얼엔진5 c++ BehaviorTree(Decorator, Selector, 플레이어 발견, 원위치로)

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

 

▣ 먼저 PlayerLocation을 활성화 비활성화하는 방식으로 AI를 이동하고 다시 원래위치로 돌아가는 코드를 작성하겠습니다. 

 

▣ LineOfSightTo() 함수로 플레이어를 발견하면 BlackBoard PlayerLocation를 세팅하고 아니면 PlayerLocation블랙키를 지우는 코드를 작성합니다.

 

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/BlueprintAPI/AI/Components/Blackboard/ClearValue%3Fapplication_version%3D5.0%3Fapplication_version%3D5.0%3Fapplication_version%3D5.0?application_version=5.0

 

Clear Value

Clear Value

dev.epicgames.com

 

 

 

 

▣ BehaviorTree로가서 Selector를 추가하고 Sequence에서 오른쪽마우스를 클릭하여 Decorator를 추가해서 위에 이미지처럼 연결합니다. 

 

▣ Sequence에 Decorator Blackboard를 추가하고 블랙보드 키(Blackboard Key)와 키 쿼리(Key Query)를 위에 이미지처럼 설정합니다. 블랙보드 키에 쿼리 값이 설정이 되어있으면 PlayerLocation에 Move to를 실행하고 아니면 옆에 ReturnLocation을 실행하는 노드입니다.

 

▣ Selector : 선택기 노드는 왼쪽에서 오른쪽으로 하위 항목을 실행합니다. 자녀 중 하나가 성공하면 실행을 중단합니다. Selector의 하위 항목이 성공하면 Selector도 성공합니다. Selector의 모든 하위 항목이 실패하면 Selector도 실패합니다.

 

▣ Sequence : 시퀀스 노드는 왼쪽에서 오른쪽으로 자식을 실행합니다. 자식 중 하나가 실패하면 실행을 중지합니다. 하위 항목이 실패하면 시퀀스도 실패합니다. Sequence의 모든 자식이 성공하면 Sequence도 성공합니다.

 

▣ Decorator : 다른 비헤이비어 트리 시스템의 조건부라고도 알려진 Decorator는 Composite 또는 Task 노드에 연결되며 트리의 분기 또는 단일 노드를 실행할 수 있는지 여부를 정의합니다.

 


- Decorator 노드 디테일창 메뉴

 

▣ 관찰자 노티파이(Notify Observer)
On Result Change 조건이 변경될 때만 재평가합니다.
On Value Change 관찰된 블랙보드 키가 변경될 때만 재평가합니다.

 

▣ 관찰자 중단(Observer Aborts)
None 아무것도 중단하지 않습니다.
Self 자신 및 이 노드 아래에서 실행 중인 모든 서브트리를 중단합니다.
Lower Priority 이 노드의 오른쪽에 있는 모든 노드를 중단합니다.
Both 자신, 이 노드 아래에서 실행 중인 모든 서브트리, 이 노드의 오른쪽에 있는 모든 노드를 중단합니다.

 

▣ 블랙보드 키(Blackboard Key)

데코레이터가 작업할 블랙보드 키입니다. 

▣ 키 쿼리(Key Query)
Is Set 값이 설정되었는지 여부입니다.
Is Not Set 값이 설정되지 않았는지 여부입니다.
노드 이름(Node Name) 비헤이비어 트리 그래프에 표시되는 노드 이름입니다.

 

 

https://dev.epicgames.com/documentation/en-us/unreal-engine/unreal-engine-behavior-tree-node-reference-composites?application_version=5.3

 

Unreal Engine Behavior Tree Node Reference: Composites

Reference for the Behavior Tree Composite nodes.

dev.epicgames.com

 

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

 

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

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

dev.epicgames.com

 

 

▣ 플레이를 하면 시야에 있을 때와 아닐 때 각각 위치로 이동하는 걸 확인할 수 있습니다. 

 

 

 

▣ PlayerLocation으로 조건을 구분하면 나중에 관리하기 어렵기 때문에 isFindPlayer bool 형으로 하나 키를 생성하고 

cpp파일로 가서 플레이어를 발견하고 발견하지 않으면에 대한 Blackboard를 세팅하는 코드를 추가합니다. 

 

 

▣ 그리고 BlackboardKey를 isFindPlayer로 지정한 다음에 

 

 

▣ 플레이를 하면 아까와 동일하게 정상적으로 작동합니다. 

 

 

▣ 그리고 isFindPlayer가 False 경우에 대한 Decorator에 대한 걸 추가해 주면 더 안정적으로 실행됩니다. 

728x90
반응형

댓글