카테고리 없음

유한상태머신(FSM)

rxo2 2025. 4. 17. 20:25

몬스터가 '대기 -> 순찰 -> 추격 -> 공격' 하는 흐름에 사용되는 강력한 개념이 FSM(Finite State Machine, 유한상태머신).

 

FSM은 정해진 상태들과 입력에 따라 상태가 전이(Transition)되는 논리적 구조.

  • 상태(State): 현재 객체가 어떤 행동을 하고 있는지 표현 (예: Idle, Patrol, Attack)
  • 입력(Input): 외부 자극 또는 조건 (예: 적 발견, 공격 당함)
  • 전이(Transition): 조건이 충족되면 한 상태에서 다른 상태로 전환
[Idle] → (적 발견) → [Chase] → (사거리 진입) → [Attack] → (적 사망) → [Idle]

 

예시

ublic interface IState {
    void Enter();
    void Execute();
    void Exit();
}

public class IdleState : IState {
    public void Enter() { Debug.Log("Idle 상태 진입"); }
    public void Execute() { /* Idle 로직 */ }
    public void Exit() { Debug.Log("Idle 상태 종료"); }
}

public class StateMachine {
    private IState currentState;

    public void ChangeState(IState newState) {
        currentState?.Exit();
        currentState = newState;
        currentState.Enter();
    }

    public void Update() {
        currentState?.Execute();
    }
}

public class Enemy : MonoBehaviour {
    StateMachine stateMachine = new StateMachine();
    IdleState idleState = new IdleState();

    void Start() {
        stateMachine.ChangeState(idleState);
    }

    void Update() {
        stateMachine.Update();
    }
}

장점: 유지보수가 쉬움, 상태별 로직이 분리되어 깔끔함
단점: 구조를 이해하는 데 시간 필요

 

유한상태머신(FSM)은 게임의 흐름을 논리적으로 설계하고 관리하는 데 매우 유용하다.
특히 상태가 복잡하거나 반복적으로 등장하는 게임 시스템에 매우 적합!.