예전에 프로젝트를 진행하다가 캐릭터가 걷는 도중에 공격을 해야 하는 상황이 생겼는데요. 이동 애니메이션과 공격 애니메이션을 동시에 재생해야 했는데, 하나의 레이어로는 둘 중 하나만 재생이 되더라고요. 이때 사용했던 애니메이터 마스크 레이어(Avatar Mask + Animator Layer) 를 포스팅해보려고 합니다! 게임 개발을 하다 보면 "이동하면서 총 쏘기", "걸으면서 손 흔들기"처럼 상체와 하체가 서로 다른 애니메이션을 동시에 재생해야 하는 상황이 자주 생기잖아요. 이걸 깔끔하게 해결해주는 게 바로 Avatar Mask + Animator Layer 조합입니다.
1. Avatar Mask란?
Avatar Mask는 애니메이션이 어느 뼈대(Bone)에만 적용될지를 정의하는 에셋입니다. 쉽게 말해, "이 애니메이션은 상체 뼈대에만 써!" 라고 Unity에게 알려주는 필터예요.
Unity의 Humanoid 캐릭터 기준으로, 신체를 다음과 같이 나눌 수 있어요.
- 상체(Upper Body) : 척추, 양팔, 머리
- 하체(Lower Body) : 골반, 양 다리
Avatar Mask에서 초록색 부위는 적용, 빨간색 부위는 제외입니다. 상체 마스크를 만들면 해당 레이어의 애니메이션이 상체 뼈대에만 영향을 주게 돼요!
2. Animator Layer란?
Animator Controller 안에서 여러 애니메이션 상태 머신을 독립적으로 실행할 수 있게 해주는 레이어 시스템입니다.
포토샵의 레이어와 똑같아요. 아래 레이어는 이동, 위 레이어는 공격 — 위 레이어가 아래 레이어를 덮어씌우는 방식으로 동작합니다. 여기에 Avatar Mask를 얹으면 "위 레이어는 상체만 덮어써!" 가 되는 거예요!
구조를 한눈에 보면 이렇습니다.

3. 설정 방법
① Avatar Mask 생성
Project 창에서 우클릭 → Create → Avatar Mask 를 선택합니다.
생성된 Avatar Mask를 클릭하면 인스펙터에서 Humanoid 신체 부위가 초록/빨간색으로 표시돼요. 상체 마스크를 만들려면 척추(Spine), 양팔(Left/Right Arm), 머리(Head)만 초록색으로 켜두고, 하체는 모두 꺼주면 됩니다.
② Animator Controller에 레이어 추가
Animator 창을 열고 왼쪽 상단 Layers 탭에서 + 버튼으로 새 레이어를 추가해요.
레이어 설정에서 중요한 항목은 두 가지입니다.
- Weight : 1로 설정 (0이면 레이어가 아예 적용 안 됨!)
- Mask : 방금 만든 Avatar Mask를 드래그해서 할당
③ Blending 모드 선택
레이어 설정의 Blending 항목에서 두 가지 모드 중 선택합니다.
- Override : 아래 레이어를 완전히 덮어씀. 상체 공격 애니메이션처럼 하체와 완전히 독립적으로 동작할 때 사용
- Additive : 아래 레이어 위에 추가로 얹음. 숨쉬기, 고개 끄덕임처럼 미세한 동작을 더할 때 사용
이번 케이스(걷기 + 공격 동시 재생)는 Override가 정답이에요!
④ C# 코드로 레이어 제어
public class PlayerAnimator : MonoBehaviour
{
private Animator _animator;
// Animator Parameter 해시 (문자열 비교보다 성능 우수)
private static readonly int IsWalking = Animator.StringToHash("IsWalking");
private static readonly int Attack = Animator.StringToHash("Attack");
// Upper Body 레이어 인덱스 (Base Layer = 0, 추가한 레이어 = 1)
private const int UpperBodyLayer = 1;
private void Awake()
{
_animator = GetComponent<Animator>();
}
private void Update()
{
// 하체: 이동 여부에 따라 걷기 애니메이션
bool isMoving = Input.GetAxis("Horizontal") != 0 || Input.GetAxis("Vertical") != 0;
_animator.SetBool(IsWalking, isMoving);
// 상체: 공격 입력 시 Upper Body Layer에서만 Attack 트리거 발동
if (Input.GetMouseButtonDown(0))
{
_animator.SetTrigger(Attack);
}
}
// 공격 중 상체 레이어 가중치 조절 (필요 시)
public void SetUpperBodyWeight(float weight)
{
_animator.SetLayerWeight(UpperBodyLayer, weight);
}
}
SetLayerWeight()를 활용하면 공격 중 상체 레이어의 가중치를 0~1 사이로 블렌딩하는 것도 가능해서, 더 자연스러운 전환 효과를 만들 수 있어요!
4. 실제 적용 예시
제 프로젝트에서는 NPC가 걷는 도중 공격을 해야 하는 상황이 있었어요.
적용 전 : 공격 트리거를 발동하면 이동 애니메이션이 끊기고 전신이 공격 모션으로 덮어씌워짐 → 캐릭터가 공격할 때마다 제자리에서 멈추는 어색한 연출
적용 후 : Base Layer는 계속 이동 애니메이션 재생, Upper Body Layer가 상체에만 공격 애니메이션을 Override → 걸어가면서 자연스럽게 공격하는 연출 완성
나중에 "걷기 + 아이템 줍기", "달리기 + 총기 재장전"처럼 새로운 상황이 생겨도, Upper Body Layer의 애니메이션만 교체하면 되니까 Base Layer를 전혀 건드릴 필요가 없어요!
5. 마무리
Avatar Mask + Animator Layer 조합은 단순히 "상체 따로 하체 따로" 그 이상으로, 애니메이션 시스템의 확장성과 유지보수성을 동시에 챙길 수 있는 중요한 기법입니다.
특히 액션 게임이나 RPG처럼 이동과 전투가 동시에 일어나는 장르에서는 사실상 필수에 가까우니, 꼭 한 번 직접 설정해보시길 추천드립니다!
'유니티' 카테고리의 다른 글
| 게임 최적화(1) - Unity Profiler 읽는 법! (0) | 2026.05.21 |
|---|---|
| 최적화 - 유니티 최적화 시리즈 시작! (0) | 2026.05.08 |
| 디자인 패턴 - 서비스 로케이터 패턴(Service Locator Pattern) (0) | 2026.04.08 |
| 디자인 패턴 - 옵저버 패턴(Observer Pattern) (0) | 2026.04.02 |
| [패치 리뷰]Unity 6.3 주요 패치 내용!! (0) | 2026.02.10 |
