몬스터가 '대기 -> 순찰 -> 추격 -> 공격' 하는 흐름에 사용되는 강력한 개념이 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)은 게임의 흐름을 논리적으로 설계하고 관리하는 데 매우 유용하다.
특히 상태가 복잡하거나 반복적으로 등장하는 게임 시스템에 매우 적합!.