Animancer는 기존 Unity의 Animator Controller를 대체할 수 있는 코드 기반의 애니메이션 시스템 에셋이다.
Animancer는 Pro와 Lite 두 가지 버전이 있는데,
Pro는 소스코드 및 모든 기능을 포함한 것이고,
Lite는 Pro의 기능은 사용할 수 있되, 내부 코어가 소스코드가 아닌 dll로 제공된다.
그리고 에디터에서는 문제 없이 사용이 가능하지만, 빌드를 하게 되면 코드가 빠지기 때문에 에러가 생기게 된다.
기존의 Animator Controller는 위와 같이 복잡하고, 디버깅이 불가능한 구조를 가지고 있었다.
캐릭터가 사용할 모든 애니메이션이 저 컨트롤러 안에 정의가 되어 있어야하고, parameter 들로 컨트롤해야 한다.
parameter의 조건들로 애니메이션의 전환이 일어나기 때문에, 어느 타이밍에 무조건 특정 애니메이션이 재생되어야 할 때
이게 100% 재생이 될 것인가에 대한 확신을 가지기가 어렵다.
Animator Controller가 가진 한계를 극복하고자 나온 것이 Animancer이다.
https://kybernetik.com.au/animancer/docs/introduction/mecanim-vs-animancer/
기존의 Mecanim이 가진 단점들과 Animancer가 이를 어떻게 보완할 수 있는지는 위 문서에 잘 나와 있다.
Animancer는 기존의 Animator Controller를 버리고, 코드 기반의 Animation 제어 시스템을 만들고 싶을 때 굉장히 유용한 에셋이다. 격투 게임이나, 많은 애니메이션 상태를 가진 액션 게임을 만들 때 유용하게 쓰일 수 있다.
이런 게임들은 Animator Controller의 그래프 기반 시스템을 사용하기에 적합하지 않고, 비효율적인 부분이 굉장히 많다.
키 입력에 따라 콤보가 즉각 들어가고 애니메이션이 다양하게 스위칭되어야 하는 상황들을 Animator Controller 그래프로 구성한다는 것은... 생각만 해도 끔찍하다.
[Animancer Component]
캐릭터에 Animancer Component를 추가하고 Animator를 가리키는 것이 Animancer의 기본 세팅이다.
Animancer라고 해서 완전히 독자적인 애니메이션 시스템을 가진 것은 아니다.
Animator를 기반으로 동작하는 것은 맞지만, Animator Controller의 모든 것을 대체할 수 있는 것 또한 맞다.
Animancer Component는 독자적인 Option과 기능을 가지고 Animator를 제어한다.
애니메이션의 재생 명령 및 애니메이션 재생 속도와 관련된 것들은 Animancer를 통해서 하면 된다.
Animancer를 사용하게 된다면 더 이상 직접적으로 Animator에 접근하게 될 일은 없을 것이다.
[StateMachine]
Animancer의 핵심 클래스 중 하나이다.
TState는 StateMachine이 관리하게 될 상태들의 base클래스라고 보면 된다.
예를 캐릭터의 상태가 idle, move, attack 이 있다고 한다면, 각각의 상태를 State로 정의한 다음
진입할 수 있는 조건, 빠져나갈 수 있는 조건, 사용할 애니메이션, 상태 도중 행해야 하는 동작 들을 State에 작성을 하고,
StateMachine을 통해서 관리 및 전이를 하면 된다.
기존 대부분의 게임에서는 캐릭터의 상태를 코드에서 따로 갖고 있고, 상태에 따라 Animator의 변수나 트리거를 세팅하는 식으로 애니메이션을 스위칭했다고 한다면, 이제는 이 동작들을 StateMachine 하나로 전부 통합할 수 있게 된다.
[ClipTransition]
애니메이션 클립에 대한 Transition 정보를 세팅할 수 있는 Animancer 만의 에셋이다.
Animancer에서 애니메이션 재생은 Animation 클립을 그대로 넘겨주는 방법도 있고, ClipTransition 에셋을 넘겨주는 방법도 있다.
ClipTransition 에셋을 넘길 경우 이 에셋에 세팅된 Transition 을 기반으로 애니메이션 스위칭이 일어나게 된다.
위는 ClipTransition Asset의 한 예이다.
위 에셋에서는 Transition Type을 ClipTransitionSequence로 설정해놨는데, 이렇게 되면 클립들을 시퀀스로 나열할 수 있게 된다.
예를 들어 나에게 1회전 발차기 애니메이션이 있는데, 게임에서는 이걸 한번의 재생 호출로 3번 반복하는 3회전 발차기 애니메이션으로 사용하고 싶을 수 있다.
이럴 경우에 위처럼 같은 애니메이션 클립을 3번 나열해주고 ClipTransition을 Animancer로 재생을 하면
한번의 애니메이션 재생으로 3회전 발차기를 할 수 있게 된다.
Animancer에서는 ClipTransition Asset을 쉽게 수정할 수 있도록 별도의 Preview를 제공한다.
Animancer의 핵심 클래스들만 살펴보았다.
이외에도 Layer, IK, Event 등 Animator Controller에서 제공하는 모든 기능들을 Animancer에서도 코드기반으로 제공하니
Code base로 신뢰성 있는 애니메이션 시스템을 만들고자 한다면 Animancer가 최고의 선택이 될 것이다.
'Game Engine > Unity' 카테고리의 다른 글
(Unity) Spectator Camera - Input System Version (1) | 2022.10.18 |
---|---|
(Unity) Input System을 이용한 게임패드, 키보드 입력 감지 (0) | 2022.08.15 |
(Unity) Certified Expert : Programmer item walkthrough (0) | 2022.08.01 |
(Unity) Inverse Kinematics (역운동학) (0) | 2022.07.28 |
(Unity) Avatar Mask를 이용한 Humanoid 상,하체 분리 및 회전 (0) | 2022.07.27 |