FSM이란?
FSM이란?
- 유한상태기계(finite state machine, FSM)는 게임 에이전트에게 환상적인 지능을 부여하기 위한 선택 도구로 사용되어왔다.
다시 말해, 유한상태기계는, 주어지는 모든 시간에서 처해 있을 수 있는 유한 개의 상태를 가지고 주어지는 입력에 따라 어떤 상태에서 다른 상태로 전환시키거나 출력이나 액션이 일어나게 하는 장치 또는 그런 장치를 나타낸 모델이다.
- FSM 이란 특정한 상태를 정의하기 위한 개념적 모델인 것이다.
여러개의 제한된 상태(State)가 존재하고 그 존재들이 특정 조건에 물려 서로 연결되어있는 형태를 의미한다.
- 유한 상태 기계의 간단한 예로는 집에 있는 전등 스위치를 들 수 있다.
- 스위치가 On일 때는 전등의 불이 들어오게 되고 그 상태가 유지된다.
- 만약 누군가가 와서 스위치를 Off하게 되면 전등의 불은 꺼지게 된다.
- 이때도 마찬가지로 누군가가 스위치를 On하기 전까지는 불이 꺼진 상태를 유지 할 것이다.
- 이처럼 유한상태기계도 어떤 상태를 유지 하고 있다가 특정한 이벤트가 발생하게 되면 조건에 맞는 상태로 생태가 변하게 되는 방식이다.
게임에서의 FSM
- 아래의 그림은 게임에서 NPC나 Monster 등에 적용되는 간단한 AI 상태이다.
- 위의 그림같이 특정한 조건에 따라 그 조건으로 상태가 전환이 되면서 해당되는 상태를 처리하는 것을 FSM이라고 한다.
FSM을 왜 사용하는가?
- FSM을 사용하는 이유는 간단하다.
- 쉬운 개념의 적립, 각 상태와 형태가 코드상이 아닌 도표로써 나타내짐으로써 AI의 개념을 프로그래머 이외에 기획자 또는 제 3자가 쉽게 확인, 설계가 가능하기 때문이다.
- 그리고 정해진 룰이 있기 때문에 프로그래머 입장에서 코딩시 조금 더 안정성이 높은 코드를 만들어낼수 있다.
그리고 각각의 상태는 나위어져 있기 때문에 새로운 상태의 추가 삭제가 용의하다.
FSM이 모든 AI를 대변하는 것은 아니다. Fuzzy, 하드코딩 AI 등 게임에서는 여러 가지 형태가 병합되어있다.
위의 그림을 참고삼아 예를 들어보도록 하겠다. 아래의 몬스터 예상 공격패턴이 있다.
- 현재 한 마리의 Moster가 존재한다.
- Moster의 공격대상은 당연히 Player이다.
Moster는 공격대상이 없을 때는 주위를 방황하며 걸어다니거나(Move) 제자리에서 혼자 무언가를 하고 있다.(Idle) 공격대상이 생겼을 경우 Moster는 해당 대상을 공격(Attack) 한다.
- 위의 패턴을 잘 보면 위의 그림으로 나타낸 도표로 다 표현할 수 있다.
- 그리고 FSM으로 구현되어져 있기 때문에 각각의 상태는 여러가지 형태로 변경될 수 있다.
- 예를 들자면 Attack 상태를 여러가지로 나위어 놓을 수 있다.
- 언제나 Critical한 공격만 하는 상태
- 아주 약한 공격을 여러 번 하는 공격 상태
- 장거리 공격을 하는 공격 상태
- 위와 같이 여러 가지 공격 상태를 정해두고 상태를 변환하는 것만으로도 다양한 형태의 AI를 가진 Moster가 구현될 수 있는 것이다.
FSM 장점
- 빠르고 코딩하기가 쉽다.
- 오류수정이 용이하다.
- 계산 부담이 없다.
- 직관적이다.
- 유연성이 있다.
This post is licensed under CC BY 4.0 by the author.