010-2135-9730무료 상담
개념 풀이

상태 머신이란? 처음 배우는 사람을 위한 쉬운 설명

상태 머신(State Machine)은 대상이 한 번에 하나의 '상태'에만 있도록 정하고, 어떤 조건이 되면 다른 상태로 넘어가게 만드는 구조입니다. 캐릭터가 서 있기, 달리기, 점프, 공격 중 지금 무엇을 하고 있는지 분명히 나눠 두는 것이죠. 상태마다 할 일과 넘어가는 조건을 따로 적어 두면, if문이 뒤엉켜 생기는 이상한 버그를 크게 줄일 수 있습니다. 게임에서는 플레이어 조작, 적 AI, 애니메이션, UI 화면 전환까지 폭넓게 쓰입니다.

읽는 시간 약 7분게임프로그래밍
게임프로그래밍 과정
이 글과 연결된 과정게임프로그래밍 과정 알아보기

게임 프로그래머는 기획서의 규칙을 실제로 돌아가는 코드로 바꾸는 사람입니다. 수업은 C 언어와 C++로 변수, 함수, 포인터, 객체지향 같은 기본기를 단단히 …

지금 무엇을 하고 있는지 하나로 정하는 구조

신호등을 떠올려 보세요. 신호등은 빨강, 초록, 노랑 중 하나의 상태에만 있습니다. 빨강이면서 동시에 초록인 경우는 없습니다. 그리고 시간이 지나면 정해진 순서로 다음 상태로 넘어갑니다. 이것이 상태 머신의 가장 단순한 예입니다.

게임 캐릭터도 마찬가지입니다. 서 있다가 방향키를 누르면 달리기 상태로, 점프 키를 누르면 점프 상태로, 공중에서 땅에 닿으면 다시 서 있기 상태로 돌아갑니다. 상태 머신은 이렇게 '상태', '상태가 바뀌는 조건(전이)', '상태마다 하는 일' 세 가지로 구성됩니다.

정식 이름은 유한 상태 기계(Finite State Machine, FSM)입니다. 상태의 수가 정해져 있다는 뜻입니다. 이름이 어렵게 들리지만, 사실 많은 사람이 종이에 동그라미와 화살표로 흐름을 그려 본 적이 있다면 이미 상태 머신을 그려 본 셈입니다.

상태 머신이 없을 때 생기는 문제

처음 게임을 만들 때는 대개 불리언 변수 여러 개로 상태를 표현합니다. 점프 중인지, 공격 중인지, 맞고 있는지를 각각 참·거짓으로 저장하는 식입니다. 기능이 몇 개일 때는 괜찮습니다.

그런데 기능이 늘면 조합이 폭발합니다. 공격 중에 점프하면 어떻게 할지, 맞는 중에 공격 키를 누르면 어떻게 할지, 죽은 상태에서 이동 키를 누르면 어떻게 할지 모두 if문으로 막아야 합니다. 하나라도 빠뜨리면 죽은 캐릭터가 걸어 다니거나, 공격하면서 점프해 하늘로 날아가는 버그가 생깁니다.

상태 머신은 이 문제를 구조로 막습니다. 캐릭터는 한 번에 한 상태에만 있고, 각 상태는 허용된 전이만 갖습니다. 사망 상태에서는 이동 상태로 가는 화살표 자체가 없으니, 죽은 캐릭터가 걸어 다닐 수가 없습니다.

적 AI로 보는 상태 머신 설계 예시

간단한 경비병 적을 상태 머신으로 설계해 보겠습니다. 상태와 넘어가는 조건을 표로 정리하면 코드를 쓰기 전에 흐름이 한눈에 보입니다.

상태하는 일다음 상태로 가는 조건
순찰정해진 지점을 차례로 걸어 다님플레이어 발견 → 추적
추적플레이어 쪽으로 달려감공격 거리 안 → 공격 / 시야에서 놓침 → 수색
공격공격 동작 재생, 판정 처리동작 끝 + 거리 벗어남 → 추적
수색마지막으로 본 위치 주변을 둘러봄다시 발견 → 추적 / 일정 시간 경과 → 순찰
사망쓰러지는 동작 후 제거 대기없음

이렇게 써 두면 기획자와 대화하기도 쉬워집니다. '수색 시간을 늘려 달라', '공격 뒤 잠깐 멈칫하는 상태를 넣자' 같은 요청이 표의 한 칸을 고치거나 상태 하나를 추가하는 일로 바뀝니다.

표를 만들 때는 모든 상태에서 '맞았을 때'와 '죽었을 때'가 어디로 가는지 꼭 확인하세요. 이런 공통 사건은 빠뜨리기 쉬워서, 순찰 중에 맞으면 아무 반응이 없거나 공격 중에 죽었는데 공격 동작이 끝까지 재생되는 문제가 자주 생깁니다. 어느 상태에서든 갈 수 있는 전이는 따로 묶어 관리하는 방법도 있습니다.

상태마다 들어가기·머무르기·나가기를 나눕니다

상태 머신을 코드로 옮길 때는 상태마다 세 가지 시점을 나눠 두는 경우가 많습니다. 상태에 들어갈 때 한 번 실행하는 일, 그 상태에 있는 동안 매 프레임 실행하는 일, 상태를 떠날 때 한 번 실행하는 일입니다.

  • 들어갈 때: 공격 애니메이션 시작, 효과음 재생, 타이머 초기화
  • 머무를 때: 이동 처리, 조건 확인, 남은 시간 줄이기
  • 나갈 때: 무기 판정 끄기, 이펙트 정리, 이동 속도 원래대로

이 구분을 하지 않으면 '공격 상태에 있는 동안 매 프레임 효과음을 재생'하는 실수가 생깁니다. 반대로 나갈 때 정리를 빼먹으면 공격이 끝났는데도 칼의 충돌 판정이 남아 지나가는 적을 계속 때리는 버그가 생깁니다.

구현 방식은 다양합니다. 작은 게임에서는 열거형(enum)과 switch문으로 충분하고, 상태가 많아지면 상태마다 클래스를 따로 만드는 방식이 관리하기 좋습니다.

엔진에서 이미 만나고 있는 상태 머신

Unity의 애니메이터(Animator) 창을 열면 네모 상자와 화살표가 보입니다. 상자는 애니메이션 상태이고, 화살표는 조건에 따른 전이입니다. Unreal Engine의 애니메이션 블루프린트에도 스테이트 머신이 있어 같은 방식으로 동작을 연결합니다. 애니메이션을 연결해 본 적이 있다면 이미 상태 머신을 다뤄 본 것입니다.

다만 애니메이션 상태 머신과 게임 로직 상태 머신을 섞어 쓰면 헷갈리기 쉽습니다. 동작 재생은 애니메이터에 맡기고, '지금 공격할 수 있는가' 같은 판단은 코드 쪽 상태 머신에서 결정하도록 역할을 나누는 편이 안전합니다.

연락처만 남겨 두세요, 편한 시간에 연락드립니다상담 가능 시간 평일·주말 · 전화 010-2135-9730

처음 설계할 때 주의할 점과 연습 방법

상태를 너무 잘게 쪼개면 화살표가 거미줄처럼 늘어나 오히려 관리가 어려워집니다. 처음에는 큰 상태 몇 개로 시작하고, 필요할 때 나누는 것이 좋습니다. 상태가 수십 개로 늘어나면 상태 안에 작은 상태 머신을 넣는 계층형 구조나, 다른 AI 구조를 함께 검토하게 됩니다.

연습으로는 플랫포머 캐릭터의 서기·달리기·점프·낙하·착지를 종이에 그린 뒤 코드로 옮겨 보세요. 그림과 코드가 일치하는지 확인하는 과정에서 설계 감각이 생깁니다. 조건문이 꼬여 캐릭터가 엉뚱하게 움직이는 경험을 이미 해 봤다면, SBS아카데미게임학원 게임프로그래밍 과정 상담에서 C++ 기초부터 엔진 프로젝트까지 구조를 잡는 공부 순서를 함께 그려 보세요.

자주 묻는 질문

상태 머신과 행동 트리는 어떻게 다른가요?

상태 머신은 상태와 전이를 중심으로, 행동 트리는 우선순위와 조건에 따라 행동을 고르는 나무 구조로 설계합니다. 단순한 적은 상태 머신, 판단이 복잡한 적은 행동 트리를 쓰는 경우가 많습니다.

UI 화면 전환에도 쓸 수 있나요?

쓸 수 있습니다. 타이틀, 메뉴, 게임 플레이, 일시정지, 결과 화면을 상태로 두면 화면이 겹쳐 뜨는 문제를 막기 쉽습니다.

TIP내 상황에 맞는 답이 필요하다면 무료 상담에서 지금 수준과 목표를 기준으로 구체적으로 안내해 드립니다.

가까운 캠퍼스에서 게임프로그래밍 알아보기

사는 곳과 가까운 캠퍼스를 고르면 수업 내용, 오시는 길, 상담 신청을 한 번에 볼 수 있습니다.

함께 읽으면 좋은 글

Free consulting

게임프로그래밍, 내 상황에서는 어떻게 시작할까요?

글에서 다룬 내용을 내 실력과 목표에 맞춰 담당 멘토가 구체적으로 정리해 드립니다.

  1. 상담 신청서 접수
  2. 담당 멘토가 연락드림
  3. 방문 또는 전화로 진로·과정 상담
전화로 바로 상담010-2135-9730
전화 상담상담 신청