[Unity] Animation

Lingtea_luv·2025년 5월 19일
0

Unity

목록 보기
14/30
post-thumbnail

Animation


애니메이션은 게임에서 타격감 몰입감 등 다양한 영향을 준다. 이는 굉장히 중요한 요소이기 때문에 필수적으로 배워야하는 기능이며, 또한 이를 위해 FSM에 대해서도 알아야 할 필요가 있다.

애니메이션 구성요소

  • Animation : 애니메이션을 적용하기 위한 컴포넌트
  • Animation Clip : 객체의 움직임을 미리 정의한 파일
  • Animator Controller : Clip을 등록하고 상황에 따라 재생되어야할 애니메이션을 정해주는 컨트롤러
  • Animator
    • Update Mode : 애니메이션의 지속 시간 모드를 지정

Animator Setting

Animation을 새롭게 Import 하는 경우 Model, Rig, Animation, Materials 총 4개의 항목이 있으며 모션을 제대로 모델에 적용시키기 위해서는 각 항목 별로 확인해야하는 사항이 존재한다.

Rig

  • Animation Type : 모션을 적용시키고자하는 모델의 타입, 혹은 해당 모션을 제작할 때 기반 모델의 타입. Unity Store에서 구한 인간 모델의 모션의 경우 Type이 Humanoid로 지정되어있으나, Mixamo에서 다운 받은 경우 Type이 Generic이 되어있기 때문에 이를 Humanoid로 바꿔주어야 제대로 동작한다.
  • Avatar Definition : 모션의 기본 모델이 되는 아바타 설정. 대부분의 경우 Copy From Other Avatar로 설정해 Humanoid Avatar Mapping이 가장 정확히 되어있는 T-Pose를 Source로 활용하는 경우가 많다.

Animation

  • Loop Time : 반복 여부 설정. 걷는 모션처럼 반복 수행이 필요한 경우 체크하며, 점프 모션처럼 한 번의 실행으로 충분한 경우 체크 해제한다.
  • Root Transform Rotation : 모션의 방향 기준을 설정. Animation을 제작하는 입장에서는 골반으로 기준으로 하기 때문에 BodyOrientation으로 설정되어있는 경우가 많다. 하지만 개발자 입장에서는 발을 기준으로 하는 것이 보통이기 때문에 Original로 설정을 바꿔줘야한다.
  • Root Transform Position : 모션의 위치 기준을 설정. 점프 모션의 경우 script를 통해 설정한 점프 높이가 있다면 모델의 position.y가 해당 크기만큼 변해야할 것이다. 하지만 모션 자체에 position.y 크기가 존재한다면 해당 크기만큼 추가로 변화하기 때문에 이를 방지할 필요가 있다. 이를 위해 Based Upon을 Feet로 설정하고 Bake Into Pose를 체크한다.
  • Mirror : 모션을 반전시켜 재생. 만약 총을 오른팔로 견착하는 모션이 있는데, 왼팔로 견착하는 모션이 필요하다면 복사본을 만든 뒤 해당 기능을 체크하는 것으로 구현이 가능하다.

Avatar Mask

총을 들고 있는 모션과 아래로 내린 모션, 걷는 모션과 뛰는 모션 총 4가지의 모션이 있다고 가정해보자. 이때 총을 들고 뛰는 모션을 구현하기 위해서는 어떻게 해야할까?

새롭게 제작하는 것도 가능하겠지만, 기존의 모션을 재활용하여 만드는 것이 훨씬 더 효율적일 것이다. 이때 사용하는 것이 LayerMask로, 애니메이션을 적용시키고자 하는 Layer를 설정하여 부위 별로 다른 Animation을 부여할 수 있다.

LayerMask는 Animator 창의 Layers에서 추가할 수 있으며, 톱니바퀴를 눌러 세부 설정이 가능하다.

  • Weight : LayerMask Override 수치 적용 파라미터. 값이 커짐에 따라 새롭게 설정한 Layer의 애니메이션을 적용하는 정도가 커진다. (SetLayerWeight(1,0) : 1번 LayerMask의 Weight를 0으로 설정)
  • Mask : 애니메이션을 적용시킬 부위를 설정한 Mask.
  • Blending : Mask 적용 방식. Override의 경우 Mask를 덮어씌우는 방식으로 진행되며, 위처럼 설정한 경우 BaseLayer가 모든 부위에 해당하는 Mask여도 UpperLayer가 덮어씌워져서 자연스럽게 하반신만 지정하는 Layer가 된다.

이렇게 LayerMask 구분을 진행했다면, 각 Layer 별로 상황에 맞는 Animation을 추가하여 총을 들고 뛰는 모션, 총을 아래로 내린 채 걷는 모션 등 기존 모션을 활용하여 수많은 파생 모션을 만들 수 있다.

Blend Tree

속도가 0.05 이하일 때는 Idle 이상일 때는 Run 모션이 출력되도록 구현한다면, 속도 크기에 상관없이 0.05만 넘으면 동일한 Run 모션이 출력되어 이질감이 들 것이다. 따라서 더욱 자연스럽게 보이기 위해 속도에 따라 모션이 달라지도록 구현하기 위해서는 Blend Tree로 여러 모션을 Blend 하는 방식을 사용한다.

Animator 창에서 우클릭을 통해 Blend Tree를 생성할 수 있고, 생성된 트리를 더블 클릭하면 다음과 같은 인스펙터 창이 뜨게된다.

Motion에 Blend를 하기 위한 모션을 넣고 기준이 되는 MoveSpeed 값을 설정하며 속도에 따라 자연스럽게 모션이 출력되는 것을 볼 수 있다.

profile
뚠뚠뚠뚠

0개의 댓글