본문 바로가기

Unity/▶ Game Development: 2D Game

[2D Game] #3. Animator와 transition

728x90
반응형

애니메이터 컨트롤러와 애니메이터

애니메이터 컨트롤러는 유한 상태 머신을 사용해 재생할 애니메이션을 결정하는 상태도를 표현하는 에셋이다. 애니메이터는 애니메이터 컨트롤러를 참고하여 게임 오브젝트에 애니메이션을 적용하는 컴포넌트이다.

 

새로운 애니메이션 컨트롤러는 프로젝트 창에서 Create > Animator Controller로 생성할 수 있다.

 

애니메이터 컨트롤러 에셋이며, 애니메이터 컴포넌트라는 점에 주의한다.

애니메이터 컨트롤러 에셋
애니메이터 컴포넌트
애니메이터 컨트롤러 에셋은 애니메이션을 재생하는 방법에 대한 지도이며,
애니메이터는 자도를 통해 실제 애니메이션을 실행하는 컴포넌트이다.

 

애니메이터 창을 열어 Player 게임 오브젝트에 할당된 애니메이션 컨트롤러의 상태도를 확인한다.

  1. 애니메이션 창의 우측 상단 메뉴 버튼 > Close Tab
  2. 유니티 상단 메뉴에서 Window > Animation > Animator 클릭
  3. 열린 애니메이터 창을 적절한 위치로 배치

Animator

현재 애니메이터 창에 표시된 상태도는 Player 애니메이터 컨트롤러의 상태도이다. Player 애니메이터 컨트롤러에는 앞서 작성한 애니메이션이 존재한다.

기본 포함되는 특수 상태

아래의 상태는 애니메이션 클립을 생성하면서 만들어진 것이 아닌 애니메이션 컨트롤러에 기본적으로 포함되어 있는 상태이다.

Entry 애니메이터 동작이 시작되는 진입점. Entry 상태와 전이로 연결된 상태 가장 먼저 현재 상태로 활성화되는 기본 상태가 된다. 기본 상태는 주황색으로 하이라이트 처리가된다.

특정 상태를 기본 상태로 변경하기 위해선 우클릭 > Set as Layer Default 로 설정한다.
Exit Exit 상태는 애니메이터의 동작이 끝나는 지점이다. 현재 상태가 이곳으로 전이하면 애니메이션의 동작이 완전히 종료된다.
Any State 현재 상태가 무엇이든 상관없이 특정 상태로의 즉시 전이를 가능하게 만든다. 현재 상태와 관계없이 즉시 재생해야하는 애니메이션에 사용된다.
Entry: 현재 상태가 진입하는 '입구'
Exit: 상태 머신의 동작하는 종료되는 '출구'
Any State: 현재 상태가 무엇이든 상관없이 특정 상태로 즉시 전이하게 허용하는 상태

전이 구성하기

플레이어 캐릭터는 특별한 사건이 일어나지 않는 한 Run 상태를 현재 상태로 유지한다. 이때 Run 상태를 현재 상태로 재생하는 도중 플레이어 캐릭터가 점프를 시작하면 현재 상태가 Jump 상태로 변화해야 한다. 비슷한 방식으로 다른 상태로도 변화해야 한다.

 

단, 플레이어 캐릭터가 낙사하거나 장애물에 부딪혀 죽으면 현재 상태가 무엇이든 현재 상태가 무조건 Die로 변해야 한다. 따라서 Any State 상태에서 Die 상태로 전이를 연결해야 한다.

Animator

  1.  Run 상태에서 우클릭 > Make Transition
  2. 전이 화살표를 Jump 상태에 연결
  3. Jump 상태에서 우클릭 > > Make Transition
  4. 전이 화살표를 Run 상태에 연결
  5. Any State 상태에서 우클릭 > Make Transition
  6. 전이 화살표를 Die 상태에 연결

이렇게 Run/Jump/Die 상태의 전이를 설정할 수 있다. 그리고 어떤 상태든 상관 없이 조건만 맞으면 Die 상태로 즉시 전환할 수 있다. 이제 전이의 발생 조건을 구성한다.

피라미터(매개변수) 추가

파라미터 생성

  1. 애니메이터 창 > Parameters 클릭
  2. + 버튼 클릭 > Bool > 생성된 파라미터의 이름을 Grounded로 변경
  3. + 버튼 클릭 > Trigger > 생성된 파라미터의 이름을 Die로 변경
bool true 플레이어 캐릭터가 발판에 닿은 경우
false 플레이어 캐릭터가 발판에 닿지 않은 경우

Grounded 파라미터와 달리 Die 파라미터는 트리거 타입으로 설정한다. 트리거 파라미터는 다른 타입과 달리 특정 값을 할당할 수 없다. 트리거 타입의 파라미터는 트리거를 셋 또는 발동하여 '방아쇠를 당기는' 방식으로 사용한다.

trigger Set 플레이어 캐릭터가 발판에 닿은 경우
Invoke 플레이어 캐릭터가 발판에 닿지 않은 경우

[Run -> Jump 전이 설정]

  1. 애니메이터 창에서 Run -> Jump 클릭
  2. 인스펙터 창에서 Has Exit Time 해제
  3. Setting 탭 > Trasition Duration을 0으로 변경
  4. 조건에 Grounded 추가
  5. Grounded의 조건값을 false로 변경

이를 통해 Run -> Jump 전이 조건을 Grounded가 false인 경우 즉, 캐릭터의 발이 발판에 닿지 않았을 때로 설정한다.

Has Exit Time

Has Exit Time은 종료 시점을 활성화하는 옵션이다. 활성화된 종료 시점의 값은 Exit Time 필드에서 변경할 수 있다.

이때 종료 시점이란 전이에서 현재 상태를 탈출하여 다음 상태로 넘어가는 시점이다.

 

Has Exit Time이 활성화되면 종료 시점이 존재하게 되어 전이의 조건을 만족해도 즉시 다음 상태로 전이하지 않는다. 다시 말해 특정 종료 시점이 지나지 않은 경우 전이 조건을 만족해도 전이하지 않는다.

 

반면 Has Exit Time가 비활성화되면 전이 조건을 만족하는 즉시 전이가 실행된다.

Trasition Duration

전환 지속 시간(Trasition Duration)은 전이가 이루어지는 동안 현재 애니메이션 클립과 다음 애니메이션 클립을 섞어(블렌딩) 부드럽게 해주는 역할을 수행한다.

 

3D 캐릭터가 특정 애니메이션을 재생하다 다른 애니메이션을 실행하면 두 클립의 애니메이션이 섞여 부드러운 연출을 가능하게 한다. 하지만 2D 스프라이트를 사용한 애니메이션 클립에는 전환 지속 시간 동안의 블렌딩이 정상적으로 동작하지 않고 전이 시점만 지연된다.

 

이는 2D 스프라이트가 3D 모델과는 달리 클립 사이의 중간 위치를 계산할 '관절'이 존재하지 않기 때문이다. 따라서 2D 스프라이트에서의 전환 지속 시간을 0으로 설정해도 무방하며, 디폴트 값으로 사용한다.

 

[Jump-> Run 전이 설정]

  1. 애니메이터 창에서 Jump -> Run 클릭
  2. 인스펙터 창에서 Has Exit Time 해제
  3. Setting 탭 > Trasition Duration을 0으로 변경
  4. 조건에 Grounded 추가
  5. Grounded의 조건값을 false로 변경

이를 통해 Jump -> Run 전이 조건을 Grounded가 true인 경우 즉, 캐릭터의 발이 발판에 닿았을 때로 설정한다.

 

[Any State-> Die 전이 설정]

  1. 애니메이터 창에서 Any State -> Die 클릭
  2. Setting 탭 > Trasition Duration을 0으로 변경
  3. 조건에 Die 선택 (파라미터를 Die로 변경)

조건으로 Die 파라미터를 선택한 경우 값을 설정하는 필드가 표시되지 않는다. 트리거 타입의 파라미터를 조건을 하는 경우 수치를 검사하는 것이 아닌 트리거의 발동을 감지하는 방식으로 전이가 실행되기 때문이다.

728x90
반응형
댓글