본문 바로가기
프로그래밍/공부

[Game] FSM

by Sik.K 2023. 1. 22.

Finite State Machine, 한국어로 번역하면 유한 상태 기계라는 말이다.

 

게임을 제작할 때 사용되는 기법 중 하나인데, 주로 게임의 캐릭터를 만들 때 사용된다.

 

캐릭터(기계)는 스스로가 가질 수 있는 유한한 상태가 있다. 캐릭터는 유한한 상태 중에 동시에 딱 하나의 상태를 취할 수 있고, 각 상태들은 다른 상태로 변할 수 있는 전이 조건이 있다.

 

FSM

 

가장 단순하게 표현한 FSM의 사진이다. 몬스터를 만들 때, 몬스터의 기본적인 상태는 3가지가 있다. 플레이어를 발견하지 못한 채 움직이는 배회, 플레이어를 발견하고 다가가는 접근, 마지막으로 플레이어와 접촉하여 전투를 벌이는 공격.

 

이 세 가지의 상태는 동시에 존재할 수 없고 조건에 따라 상태가 변한다. 플레이어 발견, 근접, 제거와 같은 조건이 달성되면 상태가 변해서 취하는 행동이 달라지는 것이다.

 

이 점이 FSM의 핵심이다. 캐릭터가 취할 수 있는 상태는 한 가지이며, 각 상태는 특정 전이 조건을 달성해야만 변화가 가능하다.

 

게임을 제작할 때, 캐릭터나 몬스터, 혹은 npc를 만들게 된다면 가장 먼저 작성이 되어야 하는 부분이다.

 

해당 객체가 가질 수 있는 상태를 먼저 특정하고 각 상태로 변하는 전이 조건을 작성하게 된다면 이를 코드로 변환하는 작업이 훨씬 수월해지기 때문이다.

 

때문에 기획 단계에서부터 FSM을 이용하여 작성을 해야만 추후에 코드가 꼬이거나 하는 문제가 발생할 확률을 줄일 수 있다.

 

FSM을 이용할 때, 상태를 열거형으로 정의하거나, 상태 인터페이스를 작성하여 각 상태를 이를 상속한 클래스로 만들어 사용하는 경우가 있다. 이에 대해서는 추후에 다시 알아보도록 하자.

'프로그래밍 > 공부' 카테고리의 다른 글

[Game] DirectX11 모작 - 포켓몬스터  (0) 2023.02.07
[Game] DX 2D 게임 프로젝트 - 러시아워  (0) 2023.01.25
[Game] Uv 좌표  (0) 2023.01.22
[Game] 객체 가두기  (0) 2023.01.17
[Game] 충돌 (2)  (0) 2023.01.16

댓글