유니티 2D 애니메이션 레이어 - yuniti 2D aenimeisyeon leieo

Unity는 서로 다른 신체 부위의 복잡한 상태 머신을 관리하기 위해 Animation Layers 를 사용합니다. 예를 들면, 하체 레이어는 뛰거나 걷는 것을 관리하고, 상체 레이어는 오브젝트를 던지거나 사격하는 것을 관리합니다.

애니메이션 레이어는 Animator Controller 의 좌측 상단에 있는 Layers Widget 에서 관리할 수 있습니다.

유니티 2D 애니메이션 레이어 - yuniti 2D aenimeisyeon leieo

해당 창의 오른쪽 톱니바퀴 아이콘을 클릭하면 레이어의 설정을 볼 수 있습니다.

유니티 2D 애니메이션 레이어 - yuniti 2D aenimeisyeon leieo

각 레이어 별로 마스크와 블렌딩 타입을 지정할 수 있습니다. 마스크는 애니메이션을 적용할 신체 부위를 지정합니다. 블렌딩 타입은 애니메이션이 적용되는 방식을 지정합니다.

  • Override를 선택하면 새 레이어의 애니메이션을 사용하여 아래 레이어의 애니메이션을 대체합니다.
  • Additive를 선택하면 아래 레이어의 애니메이션 위에 새 레이어의 애니메이션을 추가합니다.
    애디티브 블렌딩이 성공하려면 추가 레이어의 애니메이션이 아래 레이어와 동일한 프로퍼티를 포함해야 합니다.

위젯 위에 있는 + 버튼을 누르면 새 레이어를 추가합니다.

Mask 프로퍼티는 해당 레이어에 사용되는 마스크를 지정합니다. 예를 들어 던지는 애니메이션을 모델의 상체에서만 재생함과 동시에 캐릭터가 걷거나 뛰거나 서 있을 수도 있게 하려면 다음과 같이 상체 부분이 정의된, 던지는 애니메이션을 재생하는 레이어 위에 마스크를 사용합니다.

유니티 2D 애니메이션 레이어 - yuniti 2D aenimeisyeon leieo

레이어 사이드바의 ‘M’ 표시는 레이어에 마스크가 적용된 것을 표시합니다.

애니메이션 레이어 동기화

때때로 동일한 상태 머신을 여러 레이어에 재사용하는 것이 유용한 경우가 있습니다. 예를 들어, “부상” 동작을 두어, “건강” 상태에서의 걷기/뛰기/점프 애니메이션과는 다른 “부상” 상태 고유 애니메이션을 시뮬레이션하기를 원한다면, 레이어 중 하나에서 동기화(Sync) 체크박스를 클릭하고, 동기화를 원하는 레이어를 선택하면 됩니다. 상태 머신 구조는 동일하지만, 상태가 사용하는 실제 애니메이션 클립은 서로 다르게 됩니다.

이는 동기화된 레이어가 자신만의 상태 머신 정의를 가지지 않는다는 의미입니다. 대신, 동기화된 레이어 원본의 인스턴스를 가지게 됩니다. 상태 머신의 레이아웃이나 구조에 변경 사항이 있는 경우(상태나 전환을 추가/제거 등), 이는 동일하게 동기화된 레이어 원본에 적용됩니다. 동기화된 레이어에만 적용되는 유일한 변경 사항은, 각 상태에서 사용되는 애니메이션 선택을 변경한 경우입니다.

타이밍(Timing) 체크박스는 가중치에 따라, 동기화된 레이어의 각각의 애니메이션이 얼마 동안 재생될지 애니메이터가 조절할 수 있도록 합니다. 만약 타이밍 체크박스가 선택되지 않은 경우, 동기화된 레이어의 애니메이션은 자동으로 조절됩니다. 옵션이 선택된 경우, 애니메이션의 재생 시간은 각각의 가중치에 따라 각 애니메이션의 균형에 맞추어 조절됩니다. 두 경우 모두, 애니메이터가 애니메이션의 재생 시간을 조절합니다. 만약 옵션이 선택되지 않은 경우, 원본 레이어의 설정이 단독으로 우선시됩니다. 그 반대의 경우에는, 두 설정 간의 균형을 맞추게 됩니다.

유니티 2D 애니메이션 레이어 - yuniti 2D aenimeisyeon leieo
화면에서는 “Fatigued” 레이어가 베이스 레이어와 동기화되어 있습니다. 상태 머신의 구조는 베이스 레이어와 같은 상태로 되어 있고, 각 상태에서 사용되는 각각의 애니메이션이 서로 다르지만 동급의 애니메이션으로 교환되어 있습니다

레이어 사이드바의 ‘S’ 표시는 레이어가 동기화된 것을 표시합니다.


  • 2021–07–07 페이지 수정됨

애니메이션 레이어

Unity는 서로 다른 신체 부위의 복잡한 상태 머신을 관리하기 위해 Animation Layers 를 사용합니다. 예를 들면, 하체 레이어는 뛰거나 걷는 것을 관리하고, 상체 레이어는 오브젝트를 던지거나 사격하는 것을 관리합니다.

애니메이션 레이어는 Animator Controller 의 좌측 상단에 있는 Layers Widget 에서 관리할 수 있습니다.

유니티 2D 애니메이션 레이어 - yuniti 2D aenimeisyeon leieo

해당 창의 오른쪽 톱니바퀴 아이콘을 클릭하면 레이어의 설정을 볼 수 있습니다.

유니티 2D 애니메이션 레이어 - yuniti 2D aenimeisyeon leieo

각 레이어 별로, 마스크(애니메이션이 적용될 애니메이션화된 모델의 부분)와 블렌딩 타입을 설정할 수 있습니다. 오버라이드(Override) 는 다른 레이어의 정보를 무시하는 설정이며, Additive 는 이전 레이어 위에 애니메이션을 더하는 설정입니다.

위젯 위에 있는 + 버튼을 누르면 새 레이어를 추가할 수 있습니다.

Mask 프로퍼티는 해당 레이어에 사용되는 마스크를 특정합니다. 예를 들어, 모델의 상체에만 던지는 애니메이션을 재생하는 동시에 캐릭터가 걷거나, 뛰거나, 서있도록 하고 싶은 경우, 다음과 같이 상체 부분이 정의되는, 던지는 애니메이션이 재생되는 레이어 위에 마스크를 사용하면 됩니다.

유니티 2D 애니메이션 레이어 - yuniti 2D aenimeisyeon leieo

레이어 사이드바의 ‘M’ 표시는 레이어에 마스크가 적용된 것을 표시합니다.

아바타 바디 마스크에 대한 자세한 내용은 여기를 참조하십시오.

애니메이션 레이어 동기화

때때로 동일한 상태 머신을 여러 레이어에 재사용하는 것이 유용한 경우가 있습니다. 예를 들어, “부상” 동작을 두어, “건강” 상태에서의 걷기/뛰기/점프 애니메이션과는 다른 “부상” 상태 고유 애니메이션을 시뮬레이션하기를 원한다면, 레이어 중 하나에서 동기화(Sync) 체크박스를 클릭하고, 동기화를 원하는 레이어를 선택하면 됩니다. 상태 머신 구조는 동일하지만, 상태가 사용하는 실제 애니메이션 클립은 서로 다르게 됩니다.

이는 동기화된 레이어가 자신만의 상태 머신 정의를 가지지 않는다는 의미입니다. 대신, 동기화된 레이어 원본의 인스턴스를 가지게 됩니다. 상태 머신의 레이아웃이나 구조에 변경 사항이 있는 경우(상태나 전환을 추가/제거 등), 이는 동일하게 동기화된 레이어 원본에 적용됩니다. 동기화된 레이어에만 적용되는 유일한 변경 사항은, 각 상태에서 사용되는 애니메이션 선택을 변경한 경우입니다.

타이밍(Timing) 체크박스는 가중치에 따라, 동기화된 레이어의 각각의 애니메이션이 얼마 동안 재생될지 애니메이터가 조절할 수 있도록 합니다. 만약 타이밍 체크박스가 선택되지 않은 경우, 동기화된 레이어의 애니메이션은 자동으로 조절됩니다. 옵션이 선택된 경우, 애니메이션의 재생 시간은 각각의 가중치에 따라 각 애니메이션의 균형에 맞추어 조절됩니다. 두 경우 모두, 애니메이터가 애니메이션의 재생 시간을 조절합니다. 만약 옵션이 선택되지 않은 경우, 원본 레이어의 설정이 단독으로 우선시됩니다. 그 반대의 경우에는, 두 설정 간의 균형을 맞추게 됩니다.

유니티 2D 애니메이션 레이어 - yuniti 2D aenimeisyeon leieo
화면에서는 “Fatigued” 레이어가 베이스 레이어와 동기화되어 있습니다. 상태 머신의 구조는 베이스 레이어와 같은 상태로 되어 있고, 각 상태에서 사용되는 각각의 애니메이션이 서로 다르지만 동급의 애니메이션으로 교환되어 있습니다

레이어 사이드바의 ‘S’ 표시는 레이어가 동기화된 것을 표시합니다.

유니티 애니메이션 레이어(Animation Layer) 사용하기

유니티 2D 애니메이션 레이어 - yuniti 2D aenimeisyeon leieo

지난 애니메이션 섹션에서는 비슷하지만 방향성이 다른 동작, 혹은 비슷하지만 속도가 다른 동작을 섞는데 사용하는 애니메이션 블랜드(Animation Blend)에 대해서 이야기해 보았다. 이번 섹션에서는 애니메이션 위에 일정 부분에 애니메이션을 덮어씌우는 애니메이션 레이어(Animation Layer)에 대해서 배울 것이다.

지난 애니메이션 블랜드 섹션 :: http://wergia.tistory.com/54

애니메이션 레이어는 여러 종류의 게임에서 이용될 수 있지만, 대표적으로는 FPS나 TPS 형식의 게임에서 주로 이용될 수 있다. 이러한 형식의 게임의 경우 캐릭터는 한 순간에 한 가지 행동만을 하는 것이 아니라, 하나 이상, 일반적으로는 두 개 정도의 행동을 하는 일이 많다. 간단하게 예를 들자면 총 같은 화기를 사용하는 FPS 게임이라면 캐릭터는 달리거나 걷는 동시에 총을 쏠 수도 있고, 단검을 휘두를 수도 있으며, 탄창을 교체하기도 한다. 앞서 이야기한 행동들을 하기 위해서 걸음을 멈추는 경우는 거의 없다. 평소에는 상체와 하체 모두 달리는 애니메이션을 취하지만, 달리는 도중에 다른 행동을 취한다면 하체는 여전히 달리는 모션을 출력하지만, 상체는 총을 쏘거나, 단검을 휘두르거나, 탄창을 교체하는 애니메이션을 출력하게 되는 것이다.

물론 이러한 애니메이션들을 일일이 만들어 내는 방법도 있지만 이것은 너무 비효율적인 일이다. 만약에 애니메이션 레이어를 사용하지 않고 모든 애니메이션을 만든다면, 가만히 서서 위의 세 가지 행동을 하는 애니메이션, 걸으면서 다른 행동을 하는 애니메이션, 달리면서 행동을 하는 애니메이션 등을 모두 만들어내야 할 뿐만 아니라, 만약 점프하면서 폭탄을 던지는 모션을 만들고자 한다면 점프하는 모션 중 어느 타이밍에 폭탄을 던지는 모션을 추가해야할지 골머리를 앓게 될 것이다.

하지만 애니메이션 레이어를 사용하게 된다면, 걷는 애니메이션, 달리는 애니메이션, 서있는 애니메이션, 점프 애니메이션, 그리고 각각의 행동을 취하는 애니메이션 정도만 만든다면 위에서 설명한 표현들을 손쉽게 할 수 있게 된다.

이번 예시를 들기 위해서 지난 애니메이션 블랜드 섹션에서 사용했던 달리기 모션과 함께 이번에 간단하게 만든 팔을 휘두르는 애니메이션을 사용할 것이다. 공격이라고 보기엔 귀엽지만 공격 모션이다. 애니메이션 레이어와 달리는 모션, 그리고 가만히 서서 공격하는 모션만 있다면 달리면서 공격하는 모션을 만들 수 있다.

애니메이션 레이어 사용법을 배우기 위해 다음의 튜토리얼을 따라해보도록 하자.

1. 애니메이션 레이어에 사용할 Animator Controller를 생성하고 그 이름을 Animation Layer라고 짓도록 하자.

2. 생성한 애니메이터 컨트롤러를 열면 다음과 같이 빈 애니메이터 컨트롤러 창이 보일 것인데 그 중에 Layers라는 항목이 있을 것이다. 그 항목을 선택하면 Base Layer가 있는데 이 레이어는 애니메이션에서 기본적으로 제공하는 레이어이다. 이 레이어의 이름을 바꿀 수도 있고 나중에 다른 레이어를 추가한다면 기본 레이어를 삭제할 수도 있다.

3. 기본적인 달리기 애니메이션을 애니메이터 컨트롤러에 추가한다. 그리고 이 애니메이터 컨트롤러를 씬에 추가한 캐릭터의 애니메이터 컴포넌트에 넣고 플레이 버튼을 누르면 이 박스맨은 계속해서 달리기만 할 것이다.

4. 이 다음 작업은 아바타 마스크(Avatar Mask)를 생성하는 것이다. 이 아바타 마스크는 애니메이션 레이어를 사용할 때, 위에 덮어쓴 애니메이션이 적용될 본을 지정하는 것으로, 해당 레이어에서 원하는 본만 애니메이션이 작동하고 그 외의 본은 그 아래 레이어의 애니메이션을 작동하도록 만드는 것이다.

5. 생성한 아바타 마스크를 열어보면 Humanoid 방식과 Transform 방식이 있는 것을 알 수 있다. 휴머노이드 방식의 경우는 사진을 보면 알다시피 일반적인 사람형태의 본에 대해서 손쉽게 마스크를 지정할 수 있게 하는 것이고, 트랜스폼 방식은 직접 만든 특별한 형태의 본을 가져와서 원하는 애니메이션이 적용될 본을 직접 선택하는 방식이다.

6. 이번엔 None이라고 비어있는 Avatar 란에 직접 만든 박스맨의 본을 가져와야 한다. 이 본은 BoxMan@Attack을 열어보면 목각인형 상체 모양의 BoxMan@AttackAvatar를 볼 수 있는데 이것을 끌어와서 넣어주면 된다. 그리고 Import skeleton 버튼을 클릭하면 박스맨에 적용된 본들이 아바타 마스크의 인스펙터 창에 표시된다.

7. 이번 섹션의 작업에서 우리가 동작하기 바라는 것은 왼팔 하나뿐이다. 박스맨의 본들 중에 왼팔에 해당하는 본은 Bone005(mirrored)이다. 이 본만이 움직이길 원하기 때문에 Bone005(mirrored)를 제외한 모든 본의 체크를 꺼준다.

8. 이제 아까 만든 AnimationLayer 애니메이터 컨트롤러로 돌아와서 Layers 항목의 아래 쪽에 +버튼을 클릭하여 새 레이어를 만들고 그 이름을 UpperBody로 변경한다.

9. 잠시 Parameters 항목으로 넘어가서 애니메이터 컨트롤러의 매개변수에 "Attack"라는 이름의 트리거를 생성한다.

10. UpperBody 레이어에 NoneAttack 상태를 만들고 애니메이션은 비워둔다. 아무것도 하지 않는 동작이기 때문에 비워두는 것이다. 만약 아무것도 하지 않는 동작이기 때문에 아래쪽의 베이스 레이어와 맞춰서 달리는 동작으로 해줘야 한다고 생각할 수 있는데 그런 식으로 달리는 애니메이션을 넣었다가는 하체의 달리는 모션과 상체의 팔 휘두르는 모션의 싱크가 일치하지 않게되는 현상을 겪을 수도 있다.

11. Attack 상태를 추가하고 Attack 애니메이션을 넣어준 다음에 NoneAttack 상태에서 Attack 상태로 넘어가는 조건에 아까 만든 Attack 트리거를 넣어준다. 이렇게 함으로서 이제 애니메이션 컨트롤러에 Attack 트리거 신호가 들어오면 캐릭터는 어택 모션을 취하게 될 것이다(설정에 실수를 했는데 Inspector 창에서 Has Exit Time의 체크는 해제해야 한다).

12. 다음 작업은 레이어 설정을 해주는 것이다. 레이어 이름 옆에 톱니바퀴 버튼을 클릭하면 레이어 옵션을 볼 수 있는데 여기서 두 가지를 설정해주면 된다. 첫 번째는 Weight 값인데 이 값은 현재 레이어와 아래 레이어의 애니메이션 비중을 의미한다. 1에 가까울 수록 캐릭터는 현재 레이어에 가까운 모션을 취한다. 즉, 1값이면 캐릭터는 현재 레이어의 애니메이션만 취한다. 그리고 Mask 옵션인데 이것은 애니메이션을 출력하고자 하는 부위만 출력하도록 해주는 것이다. 아까 전에 만든 왼팔만 적용되는 마스크를 넣어준다.

애니메이션 레이어에 필요한 모든 설정을 끝냈다. 이제 플레이 버튼을 클릭하고 캐릭터의 달리는 모션이 출력되는 도중에 Attack 트리거를 켜보면 다음 이미지와 같이 박스맨 캐릭터가 달리기 모션을 취하면서도 왼팔만은 정상적으로 휘두르는 것을 볼 수 있다.

유니티 2D 애니메이션 레이어 - yuniti 2D aenimeisyeon leieo

이것처럼 애니메이션 레이어를 사용하면 애니메이션 작업양을 획기적으로 줄이면서도 다양한 동작을 취하도록 할 수 있다. 하지만 이 예시는 매우 간단하게 제작된 본과 모델링을 사용하는 것으로, 일반적으로 게임 제작에 사용되는 복잡한 형태의 본과 모델을 사용하는 경우에는 본의 구조나 리깅된 면의 정상적인 움직임을 위한 면밀한 연구가 필요할 것이다.

마지막으로 다음의 링크에서 위의 예시로 제작된 간단한 애니메이션 레이어 예제를 받을 수 있다.

AnimaitonLayerExample.zip

다운로드

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

유니티 2D 애니메이션 레이어 - yuniti 2D aenimeisyeon leieo

Create 2D & 3D Experiences With Unity's Game Engine | Unity Pro - Unity Store

Unity Pro software is a real-time 3D platform for teams who want to design cross-platform, 2D, 3D, VR, AR & mobile experiences with a full suite of advanced tools.

store.unity.com

유니티 2D 애니메이션 레이어 - yuniti 2D aenimeisyeon leieo

[투네이션]

-

toon.at

[Patreon]

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

유니티 2D 애니메이션 레이어 - yuniti 2D aenimeisyeon leieo

[디스코드 채널]

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

유니티 2D 애니메이션 레이어 - yuniti 2D aenimeisyeon leieo