본문 바로가기
Unity 3D

Unity 3D 엔진 (13) FSM-유한 상태 기계(Finite State Machine)

by 연꿈술사 2023. 8. 21.

안녕하세요 연꿈술사입니다. 오늘은 유한상태기계 FSM에 대해 알아보겠습니다. FSM은 게임 개발 및 다양한 프로그래밍 분야에서 사용되는 설계패턴 중 하나입니다.

유니티 내에서는 이 FSM을 캐릭터의 동작이나 AI의 동작을 관리하기 위해 사용합니다.

FSM의 개념에 대해 알아보겠습니다.

1. State (상태) : FSM은 여러 개의 상태로 구성되며, 가만히 있을 때, 걸을 때, 뛸 때, 공격할 때 등 다양한 상태를 가집니다.

2. Transition (전이) : 하나의 상태에서 다른 상태로 전환하는 것을 나타냅니다. 가만히 있는 동작에서 뛰는 동작으로 변하는 등 다양한 전이를 만들 수 있습니다.

3. Event(이벤트) : 특정 조건이나 입력에 의해 발생하고, 이를 만족하면 전이된 상태를 구현합니다.

4. Action(동작) : 각 상태에서 수행되는 동작을 의미합니다.

 

Unity에서는 이런 FSM을 Animator에서 관리할 수 있습니다. 원하는 캐릭터에 Animator 컴포넌트와 Animator Controller 를 이에 부착해 사용합니다. 유니티는 이 Animator에서 이를 시각적으로 편하게 디자인할 수 있도록 만들어주며, 다양한 방법으로 사용가능하게 해줍니다.

아래는 예시 사진입니다.

FSM을 이용한 애니메이터 화면

위는 제가 간단하게 만들고 있는 게임의 FSM 화면입니다. 많이 복잡해 보이지만 직접 만들면 귀찮을 뿐 어렵지는 않습니다. 이런 시각적인 디자인 관리를 통해 어떻게 상태변환을 할지 설정하고, 다양한 이벤트를 추가할 수 있습니다.

 

그럼 이런 FSM도 장점과 단점이 있습니다.

장점 

1. 구조화되어 있다보니 프로그래머 뿐만 아니라 다른 사람들도 보기 쉽고 디자인할 수 있게 되어 있습니다.

2. Animator Controller만 부착하면 되니 여러 객체에 부착하여 재사용하기 편합니다.

3. 문제점이 생기는 곳을 플레이하며 확인하면 바로바로 알 수 있기 때문에 디버깅과 수정이 용이합니다.

 

단점

1. 위의 사진에서 보시다시피 상태수가 많아지면 매우 복잡해진다고 할 수 있습니다. 상태가 많아지고 서로 상호작용하는 것들이 많아질수록 Transition(그림에서는 화살표)의 갯수도 많아지고, 엉키지 않도록 관리해주어야 합니다.

2. 다양한 조건과 행동이 포함되다보니 FSM의 구조를 이해하고 유연성을 가져야합니다. 캐릭터마다 가지는 상태는 매번 다르고 매번 다양한 Animation을 구현해야 하기 때문에 어떤 걸 구현하더라도 망가지지 않게 유연한 관리가 필요하겠죠?

 

오늘은 FSM에 대해 간단하게 알아보았습니다. 이 FSM 내부에도 다양한 이벤트를 넣을 수 있고, 다양한 Transition내부 상호작용 키가 있습니다. 이에 대해서도 다음에 알아보겠습니다.

감사합니다.

댓글