11
18

랜덤으로 이동하다가 SphereTrace 구형 위치에 캐릭터가 감지되면
캐릭터한테 이동되는 로직을 비헤이비어 트리로 구현하였다.

Behavior Tree는 게임 AI에 특화되어있고 가독성, 재활용성이 좋다고 한다.

1. Behavior Tree란?

FSM(유한상태머신)의 유지보수와 가독성의 단점을 보안한 트리구조로 이루워져있다.
트리구조이기 때문에 위에서 아래로 쭉 볼 수 있기때문에 흐름이 한눈에 보인다.
우선순위도 쉽게 잡을 수 있다는 뜻이다.

FSM에서 A에서 B로 상태를 바꾸려면 내부에서 SetState로 흐름을 바꿔줘야하는데
BT는 부모노드가 체크를 해 왼쪽에서 오른쪽으로 한꺼번에 바꿔줄수 있다.

만약에 전이순서가 맘에 안들면 FSM의 경우 일일히 SetState를 수정해야하는데
BT의 경우에는 자식노드의 순서만 바꿔주면된다.

2. Selector, Sequence

트리구조로써 왼쪽에서 오른쪽으로 가는것이 원칙이다.

BT에는 Selector와 Sequence가 있다.
Selector는 자식중에 하나라도 성공하면 실행하고
Sequence는 자식중에 하나라도 실패하면
실행하지 않는다는 특징이 있다.

3. BlackBoard

블랙보드는 값을 set하거나 get할 수있는
공유가능한 멤버변수가 저장되는 곳이다.

키 형태로 이루워져있다.

4. 태스크, 서비스, 데코레이터

언리얼 BT UI에서 태스크는 보라색,
데코는 파란색, 서비스는 초록색이다.

1. 태스크는 말그대로 실행업무를 담당한다.
2. 데코레이터는 조건절이다. 조건에 따라 결과를 변형하거나 반복시킨다. 실행 여부를 제어한다.
3. 서비스는 검사를 통해 블랙보드의 내용을 업데이트하는데 쓴다.

참고로 BT는 일반적인 BP와 다르게 BeginPlay나 Tick이 없다
Receive Tick AI 와 Recevie Execute AI과 같이
별도의 이벤트를 지니고 있다.

- 서비스 예시

구현된 서비스

SphereTrace로 감지된 플레이어 캐릭터의 오브젝트를 블랙보드에 저장한다.
(SetBlackboard Value as Object)

- 데코레이터 예시

태스크 직전 부모노드에 속하며
캐릭터와 AI 거리로 태스크 실행 유무를 결정한다.

- 태스크 예시

블랙보드의 키에 저장된 값을 받아와 AI의 캐릭터 위치로 이동을 한다.
태스크가 끝나면 끝났다고 선언해줘야한다. Finish Execute.

우리가 자주 사용할 것같은 Task는 이미 정의되어있다.
Wait나 Moveto 등 AI에 특화되어있다.

왼쪽-> 오른쪽 실패시 그냥 랜덤으로 움직이는 FindLocation 태스크가 Execute된다.

-랜덤 이동

COMMENT