Unity

[Unity] FSM (유한 상태 기계)

박도치 2023. 12. 22. 21:00

FSM

 

FSM은 Finite State Machine의 약자로, 유한 상태 기계를 나타내는 디자인 패턴이다. 

 

상태와 상태간의 전환을 기반으로 동작하는 동작 기반 시스템이다.

 

 

1. FSM의 구성 요소

 

FSM의 구성요소로는 상태, 전환조건, 동작이 있다.

 

  • 상태: 상태는 시스템이 취할 수 있는 다양한 상태를 나타낸다. 기본 초기동작인 Idle을 기본으로 하여 attack, move, run등 다양한 상태를 말한다.
  • 전환 조건: 전환 조건은 상태 간 전환을 결정하는 조건을 말한다. 가만히 있을 때는 Idle상태로 있다가 move상태를 동작하고싶다면 움직임이 전환조건이며, 여기서 나아가 run상태로 동작하기 위해 어떤 특정한 입력키를 받아 run 상태로 전환하는 것을 말한다.
  • 동작: 상태에 따라 수행되는 동작 또는 로직을 말한다. 움직이는 동작, 뛰는동작, 가만히 있는 동작 뿐만 아니라 크게 나누면 공중에서의 동작, 땅 위에서의 동작 이런식으로도 나눠질 수 있다.

2. FSM의 동작 원리

 

FSM의 동작원리는 초기상태로 시작하여 입력 또는 조건에 따라 상태 전환이 수행된다. Idle에서 공격하면 attack에 관한 수행, 뛰려고 하면 jump에 관한 수행이 되겠다.

상태 전환은 전환 조건을 충족할 때 발생하며 이는 입력, 시간, 조건등으로 결정된다. 

 

3. FSM의 장점

FSM의 장점으로는 상태를 명확하게 정의하고 상태 간 전환을 일관되게 관리할 수 있다. 또한 복잡한 동작을 상태와 전환 조건으로 나누어 구현하므로 코드 유지 보수가 용이하다. 그리고 다양한 동작을 유기적으로 조합하여 원하는 동작을 구현할 수 있다.

 

위에서 예를 들었듯이 크게 나누면 땅위에서의 동작, 공중에서의 동작 등으로도 나눌 수 있다고 했는데, 공중에서는 떨어질때의 동작, 점프하면서 내려올때의 동작, 몬스터한테 맞아서 날아갈때의 동작, 등등 공중에서 이루어지는 동작들도 다양하게 나뉜다. 이를 FSM 디자인 패턴으로 잘 나눈다면 추후에 공중에서 내려찍는 등의 새로운 동작들도 유기적으로 코드를 작성할 수 있다.