※모든 내용은 AI로 제작하거나 요약하지 않은, 직접 작성한 글입니다.

아바타를 꾸밀 때, 애니메이션에 대한 이해는 필연적인 요소입니다.
움직임부터 표정까지 모든 '상태' 의 변화를 애니메이션이라는 이름으로 제어하기 때문입니다.
이 글에서는 그러한 애니메이션을 녹화하고, 아바타에 배치해 사용하는 과정에 대해 적어볼 겁니다.
분량이 어마어마합니다. 미리 주의드립니다. 약 4000글자입니다.
최대한 쉽게 설명해 볼게요.
얻어갈 수 있는 게 분명 많을 겁니다.

버튼을 누르면 네메시스가 왼쪽 피켓을 들고 서 있게 하고 싶습니다.
그러면 해야 할 일은
1. 피켓을 손 위치에 고정시킨다
2. 서 있는 자세를 만든다
3. 버튼을 누르면 그 자세를 재생한다
순서가 되겠네요.

피켓을 손 위치에 고정시키는 건 쉽습니다.
오브젝트의 위치와 회전을 손에 맞추고, 모듈러 아바타 제공 컴포넌트인 MA Bone Proxy를 사용하면 됩니다.
이제 자세를 만들어야 합니다.
아무것도 없는 상태로 만들기는 감이 안 잡혀서, 기본 애니메이션을 복제해 수정할 겁니다.

아바타의 최상위 부분에는 VRChat에서의 원활한 작동을 위해,
여러 속성을 관리하는 주요한 컴포넌트들이 있습니다.
VRC Avatar Descriptor에서, Playable Layers 부분을 찾아갈 겁니다.
여기는 애니메이션을 제어할 수 있는 Animation Controller 유형의 파일들이 배치되는 곳입니다.
VRChat 아바타의 레이어들은 체계적인 관리를 위해 역할에 따라 우선순위가 분류되어 있습니다.
위부터 아래 방향으로 같은 부위의 애니메이션 설정값이 덮어씌워집니다.
이걸 미리 알아두면 나중에 '왜 이런 짓을?' 이라는 질문이 생기지 않아 아주 좋습니다.
여기서 움직임을 관리하는 Base 부분을 확인해 보겠습니다.

더블 클릭하면, Animator 창에 해당 컨트롤러 파일의 구성이 뜨게 됩니다.
좌상단에 팬케이크처럼 쌓인 부분은 레이어라고 부릅니다.
일종의 서랍장입니다. 하나의 레이어에 보통 하나의 기능이 들어간다고 보면 됩니다.
오른쪽에는 화살표와 사각형 박스가 있습니다.

사각형 박스들은 State라고 부르는, 특정한 상태입니다.
저 안에 애니메이션이 들어가서 어떠한 상태가 됩니다.
춤이 들어가면 아바타가 춤을 추고, 옷을 끄는 애니메이션이 들어가면 옷이 사라지겠죠.
화살표는 Transition, 전이라고도 부릅니다. 이 둘을 합쳐서 상태 전이라고 많이들 불러요.
어떠한 조건을 만족했을 때 해당 상태로 연결해 주는 통로가 됩니다.
이 조건은 파라미터라고도 부릅니다.
반대로 돌아오게 구성할 수도 있겠죠. 스위치를 누르면 불이 켜지고, 다시 누르면 불이 꺼지는 것처럼요.
이 정도만 알아도 보통은 이름에 얘가 뭘 하는 건지 적어놓기 때문에, 대략적으로 이해할 수 있습니다.
위의 사진은 앉은 상태와 서 있는 상태를 전환하는 거겠네요.

tmi로 이후 스크린샷을 편하게 찍기 위해 슬쩍 창 구성을 바꿨습니다.

스테이트 위치에는 단일 애니메이션이 들어갈수도 있고,
애니메이션을 부드럽게 섞어서 재생해 주는 블렌드트리가 들어갈 수도 있고,
서브스테이트 머신이라는 폴더로 또다른 스테이트를 관리할 수도 있습니다. (사진의 육각형 모양 박스)
사진에서 선택한 서 있을 때의 상태는,
속도와 방향에 따라 재생되는 애니메이션이 달라져야 하니 블렌드트리가 배치되어 있는 모습입니다.

블렌드트리를 더블클릭하면, 구성품을 확인할 수 있습니다.
걸을 때, 서있을 때, 달릴 때가 8방향으로 다양하게 지정되어 있네요.
여기서 서 있는 부분을 빼오겠습니다.
서 있는 애니메이션인 proxy_stand_still 부분을 누르면...

이렇게 Project 탭에서 해당하는 애니메이션이 하이라이트됩니다.
이걸 복사해서 적절한 곳에 붙여넣습니다.

헷갈리지 않게 이름도 수정해줬습니다.
이제 녹화를 켜서 이 녀석을 수정할 겁니다.
그러기 위해서는 아바타의 Animator에 애니메이션이 연결되어 있어야 합니다.
수정할 애니메이션 파일을 끌어서 아바타 최상위에 집어넣습니다.

그러고 아바타를 선택해 보면 애니메이션이 추가되어 있습니다.
이런 파일은 작업을 끝마친 후 빌드하기 전에 꼭 제거해 주세요.

이제 Animation 창으로 가면 애니메이션 녹화와 프리뷰 버튼을 누를 수 있습니다.

만약 모듈러 아바타로 입힌 옷이 따라오지 않을 경우,
해당 에셋의 Armature에서 Merge Armature 컴포넌트의 잠금을 풀고 다시 잠궈 주세요.
해당 수정 작업은 절대 녹화 중에 하지 마세요.
위치가 꼬여 앞으로의 유니티 생활이 매우 귀찮아질 수 있습니다.
MA Bone Proxy로 붙인 에셋은 녹화 시 따라오는 기능이 지원되지 않으니,
아바타의 Bone 부분에 직접 넣어서 프리뷰해 주세요.

보통 애니메이션을 구성하는 설정값(프로퍼티)들은 블렌드쉐이프로 제어하는 경우가 많습니다.
제가 수정하려는 포즈 애니메이션은 그런 방식으로는 쉽게 할 수 없네요,
애니메이션 창에서 하단 Dopesheet를 Curves로 전환한 다음,
우측 타임라인에서 키프레임을 잡고 위아래로 움직이는 것으로 설정값을 조절해 봅시다.
Shift+스크롤을 사용해 대략적인 범위를 잡은 다음 이리저리 당겨서 조절해 보고,
애매할 때는 숫자로 정확하게 지정해 주시면 아주 좋네요.

없는 프로퍼티는, 하단 Add Property로 추가할 수 있습니다.
사진은 오른손의 손가락 부분이 필요해서 찾고 있습니다.

프로퍼티는 여러 개를 선택해서 우클릭하면 한꺼번에 추가할 수 있습니다.
하나씩 플러스 누르지 마세요...

유니티로는 간단한 자세도 처음부터 만들려면 여간 쉬운 작업이 아닙니다.
가능하면 자세는 다른 데서 가져다가 복사해서 쓰세요.
다 작업했으면 정리합시다.

프리뷰를 마친 손가락 프로퍼티는 잘라내서 새로운 애니메이션 파일에 옮깁니다.
왜냐면, 이대로 Base 레이어에 넣으면 컨트롤러를 잡는 모양에 따라 손모양을 바꾸는 Gesture 레이어에 묻혀서 적용이 안 되기 때문입니다.
각각의 Playable Layers는 이러한 계층과 덮어쓰기(Override) 구조가 명확하기 때문에 유의해 주세요.
그리고 프리뷰를 위해 아바타 안에 넣은 피켓은 다시 꺼냅니다.
아바타 아마추어 안에 통째로 오브젝트 넣으면 나중에 찾기 힘들어요. 습관 들이면 좋아요.

만들었던 자세 애니메이션을 적용시킬 메뉴와 컨트롤러를 비파괴로 짤 겁니다.
새 오브젝트를 아바타 안에 만들고 컴포넌트들을 집어넣습니다.
MA Menu Item으로 버튼을 제작하고, 파라미터 칸에 적절하게 이름을 만들어 줍니다.
입장하자마자 켠 상태로 다니기는 싫으니까 저장됨에는 체크하지 않을 겁니다.
MA Menu Installer로 해당 버튼을 아바타의 루트 메뉴에 설치합니다.
MA Merge Animator로 애니메이션을 제어할 컨트롤러를 넣을 겁니다.
애니메이터 컨트롤러 파일을 새로 만들어서 넣고,
움직임에 관여하는 애니메이션이기 때문에 레이어 유형은 Base로 지정해 줍니다.
아래는 손가락에 관여하는 애니메이션을 넣을 Guesture로 지정합니다.
두 컨트롤러 구조가 똑같고 사용하는 애니메이션만 다르기 때문에,
위에 걸 만들고 복붙한 다음 애니메이션만 바꿔칠 거에요.

애니메이션 레이어를 제작할 때는, 트랜지션에 쓸 조건(파라미터)을 직접 등록해야 합니다.
+버튼을 누르고, 껐다켰다 할 거기 때문에 타입은 Bool로 지정하고,
Menu Item에 사용했던 이름 그대로 등록해 줍니다.

Entry에 연결되는 스테이트는 무시하고,
Any state에 두 스테이트를 넣고 화살표를 연결해 줍니다.
stand_with_sign은 수정한 애니메이션,
none에는 아무것도 들어가지 않습니다.
그러면 false일 때 다른 동작 애니메이션들이 정상적으로 재생될 겁니다.

각 화살표에 Conditions를 추가해서,
signpose가 true일 때 → stand_with_sign
signpose가 false일 때 →none
으로 연결되게 했습니다.

트랜지션의 Settings를 열어, Can Transition to self를 꺼 줍니다.
이 옵션은 조건을 만족할 때마다 애니메이션을 재생할 때 사용하는 건데요,
저희는 단발성으로 버튼을 제어해서 필요가 없습니다.
Transition Duration은 애니메이션이 전환되는 속도입니다.
취향껏 설정해주시면 됩니다.
이후 레이어를 복제해 제스처 부분에 넣고, 애니메이션을 바꿔치면 애니메이션은 준비 끝입니다.
피켓도 이 기능에 연결해서 토글하면 좋겠네요.
다양한 방법이 있지만, 만들었던 파라미터와 메뉴 버튼을 활용해 보겠습니다.

처음에 만든 오브젝트에 MA Object Toggle을 추가하고, 제어할 피켓을 넣고 ON으로 설정하고,
기본 상태가 꺼져 있기 때문에 피켓 오브젝트는 꺼줍니다.
켜고 업로드하면 아바타 프리뷰에 그대로 보여서 지저분합니다.
아바타에 파라미터를 따로 추가할 필요는 없습니다.
bool 토글은 모듈러 아바타에서 자동으로 파라미터를 아바타에 등록해 줍니다.
이러면 설정이 끝났습니다.

의도한 대로 잘 작동합니다.
이렇게 제작한 포즈는,
기존 Base 레이어에 해당하는 Locomotion과 일부분 섞입니다.
이 충돌은, 레이어의 완전한 대체가 아닌 추가하는 형태로는 어쩔 수 없다가 저의 의견입니다.
발은 점프를 몇 번 하면 운 좋게 자세를 고정시킬 수 있는 VRChat식 해결 방법이 있긴 합니다...
팁으로, 많은 포즈 에셋들이 Base 레이어를 통째로 들어내고 독자적인 애니메이터 컨트롤러 파일을 설치하는 방식입니다.
그런 에셋들을 참고해서 커스텀 포즈를 구성하면 도움이 될 겁니다.
이렇게 플레이어블 레이어의 계층 구조와, 애니메이션을 녹화하는 방법, 프로퍼티를 추가하고 수치를 직접 조절하는 방법, 모듈러아바타 의상이 녹화 프리뷰에 따라오지 않을 때의 해결법, 단일 오브젝트를 캐릭터의 신체 부위에 비파괴로 고정하는 방법, 상태와 전이의 간단한 이해, 애니메이터 컨트롤러 파일을 구성하는 방법, 적절하게 애니메이션을 아바타에 적용하는 방법까지,
원래라면 여러 글에 흩어져있을 정보들을 고봉밥으로 많이 알아봤습니다.
기능을 구성할 때 어딘가 막히면 이 글을 참고해 보세요.
비파괴 메뉴를 짜는 쪽에서는 거의 정석이니까요.
'VRChat > 아바타 꾸미기 (Unity)' 카테고리의 다른 글
| 모듈러 아바타로 모델의 메쉬 지우기 (0) | 2025.11.10 |
|---|---|
| 왜 내 아바타의 얼굴이 안 바뀔까? 얼굴 표정 제대로 적용하기 (0) | 2025.11.03 |
| 모듈러 아바타로 의상의 위치, 크기를 조절해보기 (0) | 2025.10.29 |
| 5분만에 쉽게 아바타 옷장 만들기 (3) 마테리얼 옷장 (0) | 2025.10.16 |
| 5분만에 쉽게 아바타 옷장 만들기 (2) 악세서리 옷장 (3) | 2025.09.16 |