[Unity] FSM vs BT (Behavior Tree) 개념
댓글 0
댓글을 작성하려면 로그인이 필요합니다.
아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요.
FSM (Finite State Machine, 유한 상태 머신) 상태(State)와 전이(Transition)로 구성된 모델. 하나의 상태에 머물다가 특정 조건이 만족되면 다른 상태로 넘어간다. "지금 무슨 상태인가"가 중심이다.
BT (Behavior Tree, 행동 트리)
루트에서 매 tick마다 트리를 순회하며 어떤 행동을 실행할지 결정하는 모델. 노드의 성공/실패/실행중(Running) 결과가 위로 전파된다. "지금 무슨 행동을 해야 하는가"가 중심이다.
| FSM | BT | |
|---|---|---|
| 단위 | 상태(State) | 노드(Node) |
| 흐름 제어 | 상태 간 전이 | 매 tick 트리 순회 |
| 우선순위 | 전이 조건에 암묵적 내포 | 트리 구조로 명시적 표현 |
| 확장성 | 상태 늘수록 전이 폭증 (n² 문제) | 서브트리 추가로 선형적 확장 |
| 재사용 | 상태별 로직 재사용 어려움 | 노드/서브트리 단위 재사용 용이 |
| 가독성 | 단순할 땐 직관적 | 복잡해질수록 유리 |
상태 5개면 전이가 최대 20개(5×4). 상태가 늘어날수록 "어떤 상태에서 어떤 상태로 갈 수 있는가"를 관리하는 비용이 제곱으로 증가한다. 각 상태가 자기 다음 상태를 알아야 하므로 상태끼리 강하게 결합되고, "체력 30% 이하면 무조건 도망"같은 전역 규칙을 넣으려면 모든 상태의 전이 조건을 수정해야 한다.
트리 구조 자체가 우선순위와 흐름을 표현하므로, 노드는 자기 다음에 뭐가 오는지 알 필요가 없다. 개별 노드는 결합도가 낮아 다른 트리에 그대로 재사용 가능하다. 전역 규칙은 상위 노드에 배치하면 하위 전체에 자연스럽게 적용된다.
Sequence(하나라도 실패하면 실패, AND), Selector(하나라도 성공하면 성공, OR)Inverter, Repeat, Cooldown 등Action(공격, 이동), Condition(체력 체크)FSM은 상태가 적고 전이가 명확한 경우 — 문 열림/닫힘, 간단한 캐릭터 이동(Idle/Walk/Run) 같은 곳에 여전히 간결하고 좋다.
BT는 보스 패턴처럼 행동이 많고 우선순위/조건이 복잡하며, 패턴을 계속 추가·재사용해야 하는 경우에 강하다.
FSM은 "상태 중심", BT는 "행동 중심"이다. 둘은 대체재가 아니라, BT의 Leaf 노드 안에서 소규모 FSM을 돌리는 식으로 조합해서 쓰기도 한다. 복잡도와 확장 요구에 맞춰 선택하면 된다.
찾아보니 HFSM이라는 개념도 있어서 나중에 다시 정리해보겠습니다
![[Unity] Event Trigger Component](https://data.develog.develrocket.com/upload/develog/user_1777093328305/1786976296699-a3tu75/_____2026-08-17_231353.png)
Unity Event Trigger 컴포넌트

에픽게임즈에서 지원하는 EOS에 대해 알아보았다.
![[Unity] #if, #endif](https://data.develog.develrocket.com/upload/develog/user_1777093328305/1786778972982-xrtzbj/_____2026-08-15_162920.png)
if, endif
![[Unity] Event Trigger Component](https://data.develog.develrocket.com/upload/develog/user_1777093328305/1786976296699-a3tu75/_____2026-08-17_231353.png)
![[Unity] #if, #endif](https://data.develog.develrocket.com/upload/develog/user_1777093328305/1786778972982-xrtzbj/_____2026-08-15_162920.png)