20240110_FSM, BT

2024. 1. 10. 22:18IT/TIL

오늘의 TIL은 유니티에서 사용하는 FSM과 BT에 관한 내용이다.

 

최종 프로젝트를 진행하면서 플레이어와 몬스터에 사용할 로직 중에서

 

FSM과 BT 중에 어느 것을 사용할지에 대한 논의가 있었다.

 

두 방식의 장단점은 알고 있지만 실제 사용 횟수는 적어서 어느 방식을 사용할지 결정하기 어려웠다.

 

팀원들과 함께 고민을 하였지만 결론이 나지 않아 튜터님께 질문하게되었다.

 

 

튜터님께서 해주신 답변은 간단하게 요약하면 '트랜지션의 복잡도에 따라 사용할 방식을 결정하라'는 느낌이었다.

 

즉, FSM의 경우에는 트랜지션 구조에 사용하면 좋고, BT의 경우에는 복잡한 트랜지션 구조에 사용하면 좋다는 뜻이다.

 

그 이유는 FSM과 BT의 특징에 따른 결과이므로

 

오늘은 FSM과 BT를 공부하면서 어떤 특징이 있고, 각 방식의 장단점을 공부해보려 한다.

 

1. FSM(Finite-State Machine) - 유한 상태 머신

 

 

FSM은 위와 같은 도식도를 가지는 방식으로, 상태(State)에 기반하여 동작을 제어하는 방식이다.

특정 상태에서는 특정 동작만을 작동하는 1대1로 대응되는 동작을 하게 만드는 기법으로,

현재 상태를 알 수 있다면 어떤 동작을 할 지 알 수 있고, 구현하기 쉽다는 장점이 있다.

단점은 상태를 특정할 수 없다면 사용하기 어렵고(복합된 상태인 경우),

특정 상태에서 여러 동작을 수행할 수 없다는 점이 있다.

 

 

2.BT(Behavior Tree) - 행동 트리

 

BT는 위와 같은 도식도를 가지는 방식으로, 논리적인 트리 구조를 사용하여 동작을 제어하는 방식으로,

깊이 우선 탐색(DFS)으로 자식 노드를 평가하고 평가 결과를 다시 부모 노드에게 반환하는 구조를 가진다.

 

위의 예시에서 맨 처음의 Selector 노드에서 하위에 있는 Idle, Patrol, Trace and Attack의 상태 중에서 평가 결과에 맞는 노드로 이동하여 Sequence에 따라서 동작을 수행하는 방식으로

예를들어 Patrol 상태라면 Idle 노드로 갔지만 평가 결과가 맞지 않음으로 Patrol 상태로 넘어가고, Patrol 상태가 맞음으로 해당하는 Sequence인 Move To와 Patrol To Idle의 동작을 1번씩 진행하게 된다.

 

FSM과 비교하여 하나의 상태(Idle, Patrol, Trace and Attack 등)에서 할 수 있는 동작을 여러 개로 만들 수 있고,

해당 상태에서도 Selector 조건을 걸어서 다양하게 분화하는 가지로 세세한 동작을 조절할 수 있다는 특징이 있다.

단점으로는 DFS를 사용하게 되므로, Selector가 많아지면 노드를 평가하는 시간이 길어질 수 있다는 단점이 생길 수 있다.

 

 

3. FSM VS BT

그래서 어떤 방법을 사용해야되는지에 대한 결론을 적어보면,

 

트랜지션이 적을수록 FSM을 사용하는 것이 좋고, 트랜지션이 많이질수록 BT를 사용하는 것이 좋지만,

 

그 기준은 개발자의 판단에 따르는 부분으로 특정한 기준은 없다.

 

또, FSM과 BT는 상호배타적인 관계가 아니므로

 

상황에 따라서 BT 하위에 FSM을 넣을 수도 있고, 역으로 FSM 하위에 BT를 넣는 방식도 사용할 수 있다.

 

따라서 FSM과 BT의 사용은 개발자의 환경에 따라서 더 좋을 것으로 판단되는 방식을 사용하면 된다.

'IT > TIL' 카테고리의 다른 글

20240112_자료형 Int와 Float  (0) 2024.01.13
20240111_이미지에서 타일맵 만들기  (0) 2024.01.11
20240109_C#에서의 순열  (0) 2024.01.09
20240108_맵의 상호작용 물체 만들기  (0) 2024.01.08
20240105_함정 만들기  (0) 2024.01.08