▣ 먼저 PlayerLocation을 활성화 비활성화하는 방식으로 AI를 이동하고 다시 원래위치로 돌아가는 코드를 작성하겠습니다.
▣ LineOfSightTo() 함수로 플레이어를 발견하면 BlackBoard PlayerLocation를 세팅하고 아니면 PlayerLocation블랙키를 지우는 코드를 작성합니다.
▣ 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) 비헤이비어 트리 그래프에 표시되는 노드 이름입니다.
▣ 플레이를 하면 시야에 있을 때와 아닐 때 각각 위치로 이동하는 걸 확인할 수 있습니다.
▣ PlayerLocation으로 조건을 구분하면 나중에 관리하기 어렵기 때문에 isFindPlayer bool 형으로 하나 키를 생성하고
cpp파일로 가서 플레이어를 발견하고 발견하지 않으면에 대한 Blackboard를 세팅하는 코드를 추가합니다.
▣ 그리고 BlackboardKey를 isFindPlayer로 지정한 다음에
▣ 플레이를 하면 아까와 동일하게 정상적으로 작동합니다.
▣ 그리고 isFindPlayer가 False 경우에 대한 Decorator에 대한 걸 추가해 주면 더 안정적으로 실행됩니다.
'[ Unreal5 ] > - 언리얼엔진5 실습' 카테고리의 다른 글
언리얼엔진5 c++ BehaviorTree(BTService 생성 및 사용) (0) | 2024.04.30 |
---|---|
언리얼엔진5 c++ BehaviorTree(BTTask 생성 및 Character 호출) (0) | 2024.04.29 |
언리얼엔진5 c++ BehaviorTree(Blackboard Set, Ai Move) (0) | 2024.04.27 |
언리얼엔진5 c++ AIController(LineOfSightTo : 시선방향) (2) | 2024.04.27 |
언리얼엔진5 c++ AIController(Focus, Move) (0) | 2024.04.27 |
댓글