포스트

[CS] 상태 머신(State Machine)

[CS] 상태 머신(State Machine)

상태 머신(State Machine)과 FSM 정리


1. 상태 머신(State Machine)란?

  • 시스템이 가질 수 있는 여러 상태(state) 중 하나에 있고,
  • 입력(이벤트)에 따라 상태를 전이(transition)하며 동작하는 추상 모델

구성 요소

구성 요소설명
상태 (State)시스템이 놓일 수 있는 하나의 조건 또는 상황
입력 (Input/Event)상태 전이를 유발하는 자극
전이 (Transition)현재 상태에서 다른 상태로의 전이
행동 (Action)상태 진입/이탈/유지 중 발생하는 동작

2. FSM(Finite State Machine)과 차이점

항목상태 머신 (State Machine)FSM (Finite State Machine)
의미포괄적인 개념 (추상 모델)유한 개수의 상태를 가지는 특수한 상태 머신
상태 수제한 없음 (무한 상태 머신도 포함)유한한 상태 집합만 허용
사용 맥락일반 이론/프로그래밍 모델컴파일러 이론, 게임 로직 등
관계상위 개념하위 개념 (특정한 경우)

→ FSM은 상태 머신의 한 종류이며, 일반적으로 우리가 “상태 머신”이라고 부를 때 FSM을 지칭하는 경우가 많음.


3. 게임 개발에서 상태 머신 사용 예시

공통 사용처

  • AI 상태 전이 (Idle → Patrol → Chase → Attack)
  • 플레이어 행동 처리 (Idle, Run, Jump, Die)
  • UI 상태 전환 (메뉴, 인벤토리, 옵션 등)
  • 애니메이션 전이 (Animator 시스템)
  • 퀘스트/시나리오 흐름 제어

4. Unity에서 상태 머신

사용 방식

  • Animator의 Mecanim 시스템 → 시각적 FSM
  • 직접 FSM 구현 (상태 인터페이스 + 상태 전이 매니저)
  • Coroutines 기반 상태 로직 흐름 제어 가능

특징

  • 시각화된 애니메이션 FSM으로 진입장벽이 낮음
  • AnimatorController 기반의 Transition Rule 설정이 용이
  • 스크립트로도 FSM 쉽게 구현 가능 (enum + switch, 클래스 기반)

5. Unreal Engine에서 상태 머신

사용 방식

  • AnimGraph + State Machine 노드로 애니메이션 FSM 구현
  • C++ 또는 Blueprint로 FSM 직접 구현 가능

특징

  • State Machine 노드를 통해 애니메이션 블렌딩, 전이 규칙 시각화
  • UStateMachineComponent 또는 직접 C++ FSM 구현이 유연함
  • 복잡한 상태 전이에서도 Blueprint로 직관적 구현 가능

6. Unity vs Unreal FSM 비교

항목UnityUnreal Engine
기본 FSM 제공AnimatorController + MecanimAnimGraph + State Machine
시각화 도구강력함 (노드 기반)강력함 (Blueprint 연동)
코드 기반 FSMMonoBehaviour + 클래스 FSMC++/Blueprint 모두 유연
난이도비교적 쉬움복잡하지만 고성능 구현 가능
커스터마이징enum + switch로 간단하게 구현상태 객체/클래스 기반으로 구조화 가능

7. 실전 예시 (간략화된 FSM 구조)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 상태 인터페이스
class IState {
public:
    virtual void Enter() = 0;
    virtual void Update() = 0;
    virtual void Exit() = 0;
};

// 상태 매니저 예시
class StateMachine {
    IState* current;
public:
    void ChangeState(IState* next) {
        current->Exit();
        current = next;
        current->Enter();
    }

    void Update() {
        current->Update();
    }
};

8. 요약

항목설명
상태 머신상태/입력/전이/행동으로 구성된 추상 모델
FSM유한 상태를 갖는 상태 머신
게임 활용AI, 캐릭터 행동, 애니메이션, UI 흐름 등
UnityAnimator 기반 시각 FSM + 코드 FSM 구현
UnrealAnimGraph 기반 FSM + Blueprint 연동

게임에서는 주로 애니메이션에 사용되지만 FSM, 오토마타는 깊이있는 내용이라 추가로 정리 예정.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.