나만의 작은 도서관
[TIL][C++] 25081 MMO 서버 개발 77일차: [언리얼] 캐릭터에 부분적으로 갑옷을 착용시키려면 어떻게 해야하는가? 본문
Today I Learn
[TIL][C++] 25081 MMO 서버 개발 77일차: [언리얼] 캐릭터에 부분적으로 갑옷을 착용시키려면 어떻게 해야하는가?
pledge24 2025. 8. 12. 00:27주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다.
[언리얼] Skeleton, Skeletal Mesh, Static Mesh Asset, Physics Asset
- 언리얼 펩과 같은 에셋 사이트에서 에셋을 다운로드하여 프로젝트에 임포트(import)하면 위 네 가지 타입의 파일들이 생길 수 있다. 같은 에셋이더라도 이렇게 여러 타입으로 따로 생기는 이유는 무엇인지, 각각은 어떤 역할을 하는지 정리해 보록 하겠다.
Skeleton(SK_)

- Skeleton은 뼈대 데이터로, 크리쳐(ex. 사람, 몬스터)의 본(Bone) 구조와 계층, 본 이름, 본의 위치 및 회전 정보를 담고 있는 리소스이다.
- Skeleton은 크리쳐의 몸의 구조를 표현하는 “아주 중요한 정보”이며, 크리쳐의 관절의 Transform 정보를 담고 있기 때문에 관절의 회전을 주고 싶다면 Skeleton을 활용해야 한다.
Skeletal Mesh(SKM_)

- Skeletal Mash는 Skeleton과 Skin의 결합체로, Skeleton을 기준으로 보이는 모습을 정의하고 있는 리소스이다.
- Skeleton을 중심으로 표현되는 메시이기 때문에 Skeleton이 반드시 필요하며, Skeleton의 관절이 회전하면 Skeletal Mesh도 이에 따라 변형된다.
- 즉, 뼈 위에 붙은 피부(skin)처럼 관절의 변형에 맞춰 움직인다.
Static Mesh Asset(SA_)

- Skeletal Mesh와 다르게 Skeleton이 필요 없는 에셋으로, 움직이지 않는, 즉, 강체(Rigid body)인 리소스이다.
- Static Mesh Asset은 강체이기 때문에 일부 변형이 불가하며, 당연히 애니메이션을 추가하는 것도 Skeletal Mesh처럼 관절의 움직임에 맞게 움직이는 것도 할 수 없다.
- Static Mesh Asset은 그저 건물, 바위와 같은 배치용 오브젝트이다.
Physics Asset(PA_)

- Physics Asset은 Skeletal Mesh의 물리 시뮬레이션 충돌 형태와 물리 속성을 정의한 리소스이다.
- 물리적 상호작용이 발생했을 때 어떻게 반응해야 할지 정의되어 있기 때문에 Physics Asset이 빠진 상태로 Skeletal Mesh를 사용하면 물리적 상호작용은 이루어지지 않는다.
- 랙돌(Ragdoll), 충돌 처리 등을 구현할 수 있다.
정리
| 리소스 | 뼈대 있음? | 애니메이션 가능? | 주 용도 |
| Skeleton | ✔ | (자체 애니메이션 X, 다른 애니메이션 가능) | 뼈대 구조 정의 |
| Skeletal Mesh | ✔ | ✔ | 움직이는 캐릭터, 로봇 등 |
| Static Mesh Asset | ✘ | ✘ | 건물, 바위, 무기, 가구 등 |
| Physics Asset | ✔ (Skeletal Mesh 기반) | ✔ (물리 기반) | 충돌, 래그돌, 물리 반응 |
기본 종속 구조
Skeleton
↓ (이 뼈대 구조를 사용)
Skeletal Mesh
↓ (이 메시의 본 구조에 맞춰 생성)
Physics Asset
- SA_를 제외한 나머지 SK_, SKM_, PA_는 언리얼에서 위계 구조처럼 종속 관계를 가진다. SK_가 있어야 SKM_이 존재할 수 있고(뼈대 구조 없이 애니메이션 가능 메시를 만들 수 없기 때문), SKM_이 있어야 PA_가 존재할 수 있다.
- 즉, SKM_은 SK_를 기반으로 생성되기 때문에 생성된 SKM_은 특정 SK_에 바인딩되어 있으며, PA_는 SKM_의 본 구조를 기반으로 콜리전(물리 본)을 생성한다.
- PA_의 경우 같은 SK_를 가진 SKM_이라면 공유가 가능하다. 즉, 스켈레탈 메시를 여러 개 만들었다고 해도 같은 스켈레톤을 공유한다면, 같은 PA_를 사용할 수 있다는 것이다.
에디터(5.2.1 기준)에서 보는 Skeleton, Skeletal Mesh, Physics Asset

- 계층 구조에서 가장 위에 있는 Skeleton을 열어보면 위와 같은 구조의 화면이 나타나게 된다. 설명을 하자면 아래와 같다.
- 왼쪽 사이드바 계층 구조(Skeleton Tree): 현재 스켈레톤에 정의되어 있는 본의 계층 구조이다.
- 왼쪽 위 빨간 박스 표시
- Preview Mesh: 현재 스켈레톤을 기반으로 하는 스켈레탈 메시들을 화면에서 볼 수 있다.
- Preview Animation: 현재 스켈레톤을 기반으로 하는 애니메이션들을 볼 수 있다.
- 오른쪽 위 빨간 박스 표시
- 4개의 버튼이 있는데, 각각 스켈레톤(파란색 해골), 스켈레탈 매시(분홍색 사람), 애니메이션(초록색 달리는 사람), 물리 에셋(노란색 측정기?)이다.
- 위 4개의 버튼을 누르면 현재 스켈레톤을 기반으로 하는 요소들로 이동된다. 즉, 스켈레탈 매시 버튼을 누르면 여러 메시 중 하나로 이동하고, 애니메이션 버튼을 누르면 여러 애니메이션 시퀀스 중 하나로 이동한다.(이동하는 메시 선택 기준은 정확히 모르겠다)
- 해당 화면은 스켈레톤으로 들어가지 않고, 스켈레탈 메시, 애니메이션으로 들어갔을 때도 표시된다.
[언리얼] 본론. 캐릭터에 부분적으로 갑옷을 착용시키려면 어떻게 해야 하는가?
- 정말로 하루 종일 고통받았던 질문이다. 마땅한 자료가 없어서 혼자서 해결책을 찾는 데까지 너무나도 힘들었다. 오늘 TIL은 이 내용이 본론이며 중요한 부분만 정리하도록 한다.
1. 갑옷은 Skeletal Mesh로 준비해야 한다.
- 헬멧이나 상의 갑옷 같은 경우, Static Mesh Asset을 사용해도 상관없다. 캐릭터가 무지막지하게 움직여도 변형이 일어나지 않는 부위이기 때문이다.
- Static Mesh Asset을 사용하려면 “소켓 방식”이라고, 캐릭터 계층 구조에 소켓이라는 컴포넌트를 만들고 거기에 에셋을 배치하는 방식이다. 쉽게 말해, “강체를 캐릭터에 붙이는 방식”이다.
- 하지만 팔, 다리와 같은 부분을 이야기가 다르다. 팔과 다리는 접히는 부분이 존재하기 때문에 Static Mesh Asset을 넣으면 접는 모션을 할 때마다 메시와 캐릭터가 분리될 것이다. 그래서 접는 모션에도 같이 움직이는 Skeletal Mesh가 필요하다.
- 위에서 설명했듯, Skeletal Mesh를 사용한다면 반드시 제대로 정의된 Skeleton이 있어야 한다. 임포트한 결과물에 부위별 Skeleton이 생성되는 경우도 있는데, 이 경우 Skeleton에 본 계층 구조가 원하는 방식대로 정의가 되어 있는지 반드시 확인해야 한다. 관절을 표현해야 하는 스켈레톤에 본이 딸랑 하나만 있다? 그건 못 쓴다고 보면 된다.
언리얼에서 스켈레톤의 본(Bone) 정의를 새로 하면 쓸 수 있지 않을까?
- 잘 찾아보면 언리얼에서 본 정의를 할 수 있을지도 모른다. 하지만 기본적으로 마야나 블렌더와 같은 외부 3D 모델링 툴에서 만들어진 스켈레톤을 사용하는 것이 정석이다.
2. 갑옷 부위별로 Skeletal Mesh가 있어야한다.
- 캐릭터 에셋을 임포트해 가져오는 경우, 갑옷 부위별로 Static Mesh Asset이 있지만 Skeletal Mesh는 통으로 하나로만 존재하는 경우가 있다. 불행하게도 이 경우는 안된다. 언리얼에서 하나로 조립된 Skeletal Mesh를 쪼갤 수 없기 때문에 부위별로 따로 장착/탈착 할 수 없다.
- 즉, 우리는 부위별로 따로 존재하는 Skeletal Mesh를 교체하는 방식으로 캐릭터를 표현하는 모듈러 캐릭터(Modular Character) 방식을 써야 하기 때문에 반드시 부위별로 Skeltal Mesh가 있어야 한다.
3. 사용하고자 하는 갑옷의 Skeleton이 내 캐릭터의 Skeleton과 일치해야 한다.
- 이 부분이 고생한 부분 중 하나인데, 언리얼 팹에서 얻어온 Skeletal Mesh의 Skeleton과 내가 사용하는 캐릭터의 Skeleton과 다를 수 있다. 기본적으로 Skeleton이 다르면 사용하는데 어려움이 있기 때문에, 강의에서만 봐도 “꼭 같은 Skeleton인지 확인해라”는 이야기를 한다.
- 그러면 Skeleton이 다른 Skeletal Mesh는 사용할 수 없는 걸까? 그렇지 않다. 언리얼 에디터에선 Skeletal Mesh의 Skeleton을 바꿀 수 있는 기능이 있다.
Skeletal Mesh의 Skeleton 바꿔치기


- 방법은 간단하다. 적용할 Skeletal Mesh를 찾고, 오른쪽 버튼 클릭 → 나오는 창에서 상단에 표시되는 Skeletal Mesh Actions 카테고리의 Skeleton → Assign Skeleton을 클릭한다.
- 위 그림과 같은 창이 뜰 텐데 여기서 원하는 스켈레톤으로 바꿔치기하면 된다. 만약 본 이름이 동일하게 정의되었다면 자동으로 매핑되어 Skeleton을 바꿔치기하는데 수월할 것이다.
- Missing이 뜨는 건 정의한 본 개수 차이 또는 본 이름이 달라서 그러는 거다. 이 부분은 지금의 방법으로 해결할 수 없다.
본 이름이 달라버리면 어떻게 해야 하는가?
- 이게 좀 문제이다. 보통 스켈레톤을 제대로 만들어서 배포된 경우 이름 컨벤션을 맞춰주지만, 안 그런 경우도 꽤 있다.(정말 많이 당해봤다) 이 경우에는 직접 본 이름을 매핑시켜서 옮겨야 하는데, 여기까지는 아직 해결책을 얻지 못했다(IK Rig와 retargeter? 이런 걸 사용해야 한다고 한다)
4. 캐릭터 블루프린트에 Skeletal Mesh를 붙인다.
- 위 세 과정을 거쳤다면, 이제 준비는 완료되었다. 이제 캐릭터에 갑옷을 입히는 작업만 하면 된다.
- 여기서부터는 쉽다. 유튜브에도 강의로 많이 나와있으니 보고 따라만 해도 잘만 된다. 이 부분은 강의 링크를 올리는 것으로 설명을 마치겠다.
https://youtu.be/sF8rcYWCC94?si=9hi9TtI_6SJEr8Jq
