본문 바로가기
Game Engine/Unity

(Unity) Avatar Mask를 이용한 Humanoid 상,하체 분리 및 회전

by MeisterTJ 2022. 7. 27.

FPS, TPS 장르의 게임에서는 애니메이션 처리를 몸 전체로 하지 않고,

상체, 하체 및 몸통을 기본적으로 분리하는게 보통이다.

 

그 이유는 당연하겠지만, 플레이어가 조준하는 방향으로 캐릭터의 몸통이 회전하고,

달리면서 사격, 달리면서 장전 등 상체와 하체의 애니메이션이 따로 재생되는게 자연스럽기 때문이다.

 

유니티에서는 Avatar 설정 및 Avatar Mask를 이용해서 모델의 파츠별 분리를 쉽게 할 수 있다.

 

Synty Studio의 Simple Apocalypse에 좋은 예가 있어서 이를 한번 보고자 한다. 

 

오늘 사용할 모델

 

이 모델의 Animator가 사용하는 Controller 및 Avatar 이다.

SA_CharacterAvatar를 먼저 열어본다.

 

상,하체를 분리하기 위해서는 일단 Avatar에 각 Bone들이 어떤 파츠에 속하게 될 지를 지정해주어야 한다.

그리고 Avatar Mask에서 Avatar의 어떤 파츠를 사용할 것인지를 지정하는 것이 기본 원리이다.

 

Animator에 세팅되어 있는 Layer 목록이다.

설정 아이콘 왼쪽에 있는 M 표시는 이 레이어가 Avatar Mask를 사용한다는 의미이다. 

 

Parameters

Animator의 Parameter 목록이다. Parameter의 변화로 애니메이션을 제어한다. 

 


달리기 모션

기본적으로 달리기 모션은 모델의 전체 파트를 대상으로 제작되어 있다.


하체 달리기 + 상체 사격

하체는 달리기 모션을 사용하고 상체는 사격 모션을 사용한 모습이다.

 

Weapons Layer에는 Mask_Upper를 사용하고 있다.

Weapons Layer에 있는 Animation 이 재생될 경우, 이 Animation은 Mask_Upper에 해당되는 파츠에만 영향을 주게 된다.

 

Mask_Upper를 보면 몸통과 양 팔 부분이 활성화 되어있는 것을 볼 수 있다.


하체 앉기 + 상체 사격

다음은 앉기 애니메이션인데 이 애니메이션은 하체 쪽에만 적용이 되어있다.

 

Crouch Layer를 보면 Mask_LowerBody를 사용하고 있다.

 

하체만 활성화되어 있기 때문에 Crouch Layer에 속한 Animation들은 하체에만 적용이 된다.


하체 앉기 + 상체 사격 + 몸통 회전

다음은 몸통 회전이다. 몸통의 회전은 보통 플레이어의 조준선을 따라가게 된다.

방식은 두 가지가 있는데

1. 회전된 애니메이션 간의 블렌드 처리

2. 몸통 bone에 회전 처리

 

이 Animator에서는 회전된 애니메이션간의 블렌드 처리를 사용하는 것을 알 수 있다.

Body_Horizontal, Body_Vertical 파라미터의 값에 따라

이미 회전된 몸통 애니메이션을 블렌딩 시키는 것이다.

 

당연하게도 Body Layer에서 사용하는 Mask_body는 몸통만이 활성화되어 있다.