<aside>

FSM의 한계

</aside>

기존에 State Pattern을 사용해서 FSM을 제작해서 테스트를 마쳤다.

FSM의 한계에 대해 좀 더 알아보자.

FSM의 한계는 다음과 같다.

  1. 기하급수적 복잡도 증가

    AI가 처리해야 할 상태와 그 상태를 벗어나기 위한 조건이 늘어날 때, 각 상태에서 다른 모든 상태로의 Transition을 정의해야 한다.

    즉 state가 추가 될때마다 그에 맞는 Transition을 연결해주고 수정 해줘야 한다.

    그래서 전체 구조를 한눈에 파악하기 어렵게 만들게 되는 문제가 있다.

  2. 재사용 및 모듈화의 어려움

    FSM 하나의 상태에서는 특정 Context에 종속되는 경우가 많아서 이 상태 자체를 다른 AI 시스템에서 재사용하기 어려워진다.

    적이 플레이어를 공격하는 상태는 적이 플레이어를 감지하고 쫒는 상태 다음에 실행이 되는 것처럼 재사용이 어려워지는 문제가 있다.

    만약 새로운 AI를 만들 때마다 유사한 로직을 처음부터 다시 설계하거나, 복잡한 Transition을 복사해야 해서 효율성이 떨어지게 된다.

위 2가지 문제로 인해 우리가 더 좋게 개선을 하려고 해도, FSM이 가지는 한계로 인해 더 개선할 수가 없게 된다.

그러면 우리는 이를 개선할 수는 없는 것일까?

그렇지 않다. FSM의 한계를 극복하기 위해 나온 알고리즘이자 AI Architecture가 Behaviour Tree다.

<aside>

Behaviour Tree

</aside>

Behaviour Tree는 행동을 Tree 구조로 만들어서 행동을 제어하는 것이다.

<aside>

BT에서 Behaviour이란?

</aside>

BT에서 Behaviour(행동)는 node가 된다.

어떤 Node(Behaviour)들이 있는 걸까?

사람마다 다르게 다양하게 부르지만 Behaviour Tree의 Node들의 핵심은 다음과 같다.

  1. 제어 노드
  2. 수정 노드
  3. 실행 노드