애니메이션 2

애니메이터 컨트롤러의 스테이트 머신

 

 

 

애니메이터 컨트롤러 = 스테이트 머신 + 애니메이션 클립

애니메이터는 컴포넌트가 아닌 '애셋'이다. 따라서 게임 오브젝트에 직접 적용할 수 없고 애니메이터의 프로퍼티에 있는 애니메이터 컨트롤러로 링크를 설정해 사용한다. 

애니메이터를 만들고 애니메이터 컴포넌트에 연결하는 방법

 

 

◎ 스테이트 머신

스테이트 머신은 동작 표현 방법의 하나이다. FSM(유한 상태 머신)이라 불리는 모델을 바탕으로 기호를 사용해 동작을 표현할 수 있는 것이 큰 특징이다. 유니티에선 애니메이션 동작의 표현을 위해 스테이트 머신을 사용한다.

 

Animator 창에서 오른쪽 클릭으로 생성한 empty state

 

Animator 창에서는 표현된 상태를 잇는 화살표 기호로 상태간의 트랜지션, 즉 전이를 표현한다.

컨트롤러를 만들면 처음 시작은 Entry이며 이 상태에서 빈 Empty State를 추가하면 Entry -> New State 사이의 화살표가 생긴다

 

 

Animator 창에서 state를 선택하면 보이는 해당 state의 inspector창

 

스테이트 인스펙터 창 기능

Motion : 애니메이션 클립

Speed : 재생 속도 (1.0이 기본 속도)

Multiplier : 재생 속도에 애니메이션 파라미터의 값을 곱한다.

Mirror : 애니메이션의 좌우 반전

Cycle Offset : 반복 재생 시키는 경우의 시작 위치 (재생 시간의 비율은 0과 1사이)

Foot IK : 스테이트 안에 IK 계산에서 발이 땅에 붙도록 자동 보정

Write Defaults : 스테이트를 시작할 때 키 없는 프로퍼티에 기본값을 설정

 

 

 

◎ 애니메이션 클립

애니메이션 클립은 컴포넌트가 아닌 애셋이다. 따라서 단독으로는 다룰 수 없다.

State의 인스펙터에 애니메이션 클립 애셋으로 링크를 연결해 그 스테이트의 상태일 때 애니메이션 클립이 재생되는 구조이다.

 

 

애니메이션 클립을 해당 State에 적용하는 방법은 간단하다. hierarchy 창에서 해당 animation 클립을 드래그앤 드랍으로 Motion에 넣어주면 된다.

 

아니면 아직 스테이트를 생성하지 않은 경우에는 Animator 창에서 오른쪽 버튼을 클릭해서 [From Selected Clip]을 선택하면 애니메이션 클립이 연결된 State를 생성할 수 있다. 

 

애니메이션 재생을 현재 Idle 상태에서 걷기로 바꾸고 싶다면 Idle 스테이트에서 Walk 스테이트로 화살표(트랜지션)를 이어준다. 

 

 

 

 

참고 자료;

유니티 게임 프로그래밍 바이블 (김은철, 유세라 옮김 ; 위키북스) 

 

 

애니메이션 1

애니메이터 컨트롤러

 

 

 

유니티의 애니메이션 시스템은 메카님(Mecanim)이라고 한다.

메카님을 구성하는 요소들은? 애니메이터, 아바타, 애니메이션 클립, 애니메이터 컨트롤러 등이 있다.

이 메카님을 이용하는데 가장 먼저 필요한 것이 바로 Animator Component이다. 

 

 

애니메이터 컨트롤러 만드는 법

 

 

 

◎ 애니메이터 컨트롤러 

 

화살표가 트랜지션, 네모 박스가 스테이트이다.

애니메이터 컨트롤러는 'state machine(스테이트 머신)'과 거기에 연결된 'animation clip(애니메이션 클립)'을 갖는 애셋이다.

 

컴포넌트가 아닌 애셋이므로 게임 오브젝트에 직접 적용할 수가 없다.

애니메이터의 프로퍼티에 있는 애니메이터 컨트롤러로 링크를 설정해서 사용한다. 

 

스테이트 머신은 동작 표현 방법의 하나이다.

유한 상태 머신이라 불리는 모델을 바탕으로 기호를 사용해서 동작 표현이 가능한 것이 큰 특징이다.

애니메이터 창에서는 스테이트를 표현하고 스테이트를 잇는 화살표 기호로 스테이트 간의 트랜지션을 표현한다. 

 

 

 

◎ 애니메이터 컴포넌트

애니메이션 기능을 추가하고 싶은 오브젝트의 inspector창에서 Add Component를 하면 Animator Component를 추가할 수 있다.

 

컴포넌트를 추가 후 생성해 놓은 애니메이터를 끌어다 놓으면 된다.

 

1. Controller

애니메이터 컨트롤러로 매카님의 핵심인 스테이트 머신과 애니메이션 클립을 가진다.

 

2. Avatar (아바타)

3D툴(ex, 3dMax, Blender)이 출력한 모델 파일을 유니티에서 다룰 수 있게 연결된 테이터

 

3. Update Mode

애니메이션의 계산을 언제 시행할지 결정하는 것이 Update Mode이다.

update mode에는 세 가지 종류가 있다.

 

 

첫 번째로 Normal

애니메이터 계산의 갱신이 스크립트의 Update 메서드와 같은 횟수로 호출돼 타임 스케일의 영향을 받는다
애니메이션과 Update 메서드의 계산을 완전히 동기화시킬 수 있다. (Update 메서드에서 Time 클래스의 값을 사용하는 것이 조건이다)

 

두 번째로는 Animate Physics

업데이트가 Fixed Update 메서드와 같은 횟수로 호출된다.
유니티가 다루는 물리 계산과 애니메이션을 동기화시킬 수 있다

 

마지막은 Unscaled Time

갱신은 Update 메서드와 같은 횟수인데, 타임 스케일의 영향을 받지 않는다. 메뉴 화면처럼 게임이 슬로우 모션 중일 때에도 정상적으로 애니메이션 시키고자 할 때 도움이 된다. 

 

 

4. Cull Mode

애니메이션 계산의 컬링 모드 설정이다. 컬링 판정운 카메라 밖에 있을 때의 프러스텀 (카메라) 컬링. 쉴드에 가려져 있을 때의 오클루젼 컬링 등이 있다. 대량으로 애니메이션 하는 오브젝트가 존재하는 경우 등에 불필요한 계산을 생략해 절약할 수 있다. 

이 컬모드에도 세 가지 종류가 있다.

 

 

첫 번째로는 Always Animate

컬링을 하지 않고 항상 애니메이션 계산을 한다.

 

두 번째로는 Cull Update Transforms

컬링 대상이 있을 때 애니메이션 계산의 일부 (리타깃, IK, Transform으로의 반영 등)을 생략한다.

 

세 번째로는 Cull Completely

컬링 대상일 때 모든 애니메이션 계산을 생략한다. 

 

 

 

◎ 루트모션

애니메이터 컴포넌트를 적용한 게임 오브젝트 자체는 Animator에서 보면 루트가 된다.

루트 위치에 대한 애니메이션은 게임의 설계에 따라 애니메이션으로 동작하고 싶은 경우도 있고 스크립트나 물리 계산 등으로 동작하고자 할 때도 있다.

 

유니티에서는 애니메이션 클립에 루트 위치의 이동을 포함했을 때도 애니메이터 컴포넌트의 루트 모션 (Apply Root Motion) 활성화 (on/off)를 설정해서 루트 위치의 이동을 반영하지 않게 설정할 수 있다.

 

이 설정이 있으면 루트 모션의 유무에 따라 애니메이션 클립을 각각 만들 필요가 없으므로 애니메이션의 재이용성이 높아진다

 

 

 

 

 

 

 

참고 자료;

유니티 게임 프로그래밍 바이블 (김은철, 유세라 옮김 ; 위키북스) 

+ Recent posts