유니티(Unity)/2D 게임 만들기

2D 게임 만들기 (2) Animator, 유한 상태 머신 사용하기

Whiny 2021. 4. 29. 14:37

이번 포스팅에서는 Animator 창에서 유한 상태 머신을 이용해보겠습니다.

 

유한 상태 머신(Finite State Machine)이란 유한(Finite)한 수의 상태(State)가 있고, 한 번에 한 상태만 되도록 설계하는 방법입니다.

 

유한 상태 머신에서는 특정 상태에서 다른 상태로 전이(Transition)하여 현재 상태를 전환합니다.

위의 상태도를 보면 정지, 달리기, 점프가 유한한 수의 상태(State)들이고,

 

그 사이를 잇는 화살표가 전이(Transition)와 그 조건을 나타냅니다.

 


이제 직접 상태도를 구현해봅시다.

 

이전에 자동으로 생성된 Player의 Animation Controller를 더블클릭해줍니다.

 

그러면 Animator 창에서 위와 같은 모습을 볼 수 있습니다.

 

초기의 상태도에서 Any State, Entry, Exit를 확인할수있습니다.

 

Any State - 현재 상태가 무엇이든 상관없이 특정 상태로의 즉시 전이를 가능하게 만듦

 

Entry - 애니메이터 동작이 시작되는 진입점, Entry와 연결된 상태는 가장 먼저 현재 상태로 활성화되는 기본 상태가 됨

 

Exit - 애니메이터의 동작이 끝나는 지점, 현재 상태가 이곳으로 전이하면 애니메이터의 동작이 종료됨

 


이제 우클릭->Create State->Empty로 새 상태(State)를 만들고 이름을 이전 포스팅에서 만든 애니메이션 클립과 똑같이 바꿔줍니다.

 

Entry는 애니메이션 상태의 진입점이기때문에 처음에 만든 상태에 자동으로 연결됩니다.

 

만약 Idle이 Entry와 연결되지 않았다면, Idle을 우클릭해서 Set as Layer Default State를 눌러줍니다.

 

이제 캐릭터의 움직임을 표현할 상태도를 제대로 구성해봅시다.

 

State 우클릭 -> Make Transition으로 어느 상태로 전이할지 화살표를 그릴수있습니다.

 

저는 우선 다음과 같의 구성해보았습니다.

 


이제 만들었던 Animation Clip을 각 상태(State)에 설정하고, 전이(Transition)도 설정해봅시다.

 

상태를 클릭하고, 인스펙터 창을 확인해봅시다.

 

Motion탭에 각 상태와 같은 이름을 가진 Animation Clip을 설정해줍시다. (꼭 같을 필요는 없지만, 알아보기쉽게 같은 이름으로 만들었습니다.)

 

그리고 화살표, 즉 전이를 클릭하고,

 

 

Has Exit Time체크를 해제하고, Settings -> Transition Duration(s)0으로 설정한다.

 

Has Exit Time

  1. 종료 시점을 활성화하는 옵션, 활성화 하면 Exit Time필드에서 변경할수있다.
  2. 활성화되면 종료시점이 생겨 전이 조건을 만족해도 즉시 다음 상태로 전이하지 않음
  3. 종료 시점을 0.5(50%)로 설정한 경우, 현재 상태의 애니메이션이 최소 절반 이상 재생되어야 다음 상태로 전이함
  4. 활성화한 경우 전이 조건을 만족하는 즉시 전이

Transition Duration(전환 지속시간)

  1. 전이 중에 현재 애니메이션과 다음 애니메이션을 섞어 부드럽게 이어주는 역할 - 블렌딩(Blending)
  2. 3D 모델의 경우 본 데이터를 가지고 블렌딩이 가능하지만 2D 스프라이트의 경우는 지연만 일어남
  3.  

정리하면, 전이 조건을 달성하면 바로 애니메이션의 전환이 일어나게 구현하기 위해서 Has Exit Time을 해제하고,

2D 스프라이트를 사용하기 때문에 Transition Duration을 0으로 설정했습니다.

 

모든 Transition에 똑같이 설정했습니다!!

 


다음 포스팅에서는 Transition의 조건을 설정해보겠습니다.