본문 바로가기

언리얼엔진/UE4

UE4 C++ 비헤이비어 트리를 활용한 몬스터 AI 구현 (0)

들어가기전에..

비헤이비어 트리는 보통 블랙보드와 함께 사용됩니다.

블랙보드는 간단히 설명하자면 AI의 기억 저장소라고 볼 수 있습니다. 이곳에 변수를 설정하여 그것을 업데이트하고 어떤 행동을 하도록 할 수 있습니다.

비헤이비어 트리는 Root, Composite, Decorator, Service, Task의 총 5가지 노드를 가지고 있습니다.

그리고 Composite노드에는 Selector, Sequence, Simple parallel의 3가지 종류가 있습니다.

 

 

Root : 비헤이비어 트리의 가장 상위에 존재합니다. 아래로 향하는 단 1개의 노드만 연결할 수 있습니다.

 

Selector : 자식노드를 왼쪽에서 오른쪽으로 실행하며 실행중 하나라도 성공하면 Selector는 성공을 반환합니다. 반대로 자식노드 실행중 모두 실패하면 Selector는 실패를 반환합니다.

Sequence : 자식노드를 왼쪽에서 오른쪽으로 실행하며 실행중 하나라도 실패하면 Sequence는 실패를 반환합니다. 반대로 자식노드 실행중 모두 성공하면 Sequence는 성공을 반환합니다.

Simple parallel : 보통 2가지의 노드로 구성할 수 있는데, 첫번째 노드(왼쪽)이 성공을 반환할 때 두번째 노드(오른쪽)가 실행 됩니다. 예를 들면, 적을 쫓아가는 도중 공격을 하는 것이 있습니다.

 

Decorator : Composite노드나 Task에 붙여서 조건을 검사하여 그것을 실행할지 정의합니다.

IF문으로 볼 수도 있습니다.

Service : 연결이 되어있는 Composite노드들이 실행되는 동안 계속 작동하며 프로그래머가 작성한 어떠한 조건을 통해 검사하고 그것을 바탕으로 블랙보드에 업데이트합니다. 예를 들면, 몬스터의 사정거리 내에 플레이어가 존재하는지에 대해 검사하는 것이 있습니다.

Task : 프로그래머가 의도했던 행동들을 실행합니다. 이 부분을 직접 스크립트로 작성하여 블랙보드의 변수값을 업데이트 합니다.