Unreal에서 캐릭터에게 장비를 장착할려먼 어떻게 해야할까?
- Step 1 ( Bone Matrix에 대한 이해)

게임의 3D 모델을 추출해보면 수많은 본(bone)으로 구성되어 있는 것을 확인할 수 있습니다.
(필자는 Blender를 사용하여 모델을 분석하였습니다.)
캐릭터는 기본적으로 Local Space 좌표계를 기준으로 존재하며, 여기에 World Matrix를 곱해
전역 좌표계(Global / World Space)로 변환되어 실제 게임 내 위치가 결정됩니다.
이와 동일하게 무기 역시 캐릭터와 완전히 동일한 공간(Local Space) 상에서 배치되어야 하며,
그래야 캐릭터의 애니메이션 및 움직임에 자연스럽게 연동됩니다.
"왜 Local Space여야 하는가?"
라고 궁금즘을 가지고 계신 분도 있을 겁니다.
그 이유는 캐릭터의 애니메이션 변환 행렬이 모두 Local Space를 기준으로 계산되기 때문입니다.
예를 들어, 팔의 회전이나 이동은 모두 캐릭터의 로컬 좌표계(Local Space)에서 이루어집니다.
따라서 무기 역시 팔의 움직임(=본의 로컬 변환)에 정확히 따라붙기 위해서는 Local Space에서 변환되어야 합니다.
물론 World Space에서 직접 위치와 회전을 매 프레임 갱신하는 방식도 가능하지만,
이 경우 본의 행렬을 매번 수동으로 곱해서 계산해야 하며,
애니메이션과의 정확한 동기화를 유지하기 어렵다는 치명적인 단점이 존재합니다.
즉, Local Space에서 부착하고 변환을 처리하는 것이 가장 자연스럽고 정확한 방식입니다.

Unreal에서 캐릭터의 Mesh를 더블클릭하면 해당 창이 나오게 됩니다.
그 중 캐릭터의 무기는 보통 모델러 분들이 Weapon_R로 뼈를 만들어 주십니다.
(아닌 경우는 대부분은 손 뼈로 찾아보면 나옵니다.)

사진과 같이 "Add Preview Asset" 을 클릭하여 언리얼 에디터에 등록되어 있는데 Mesh를 캐릭터에게 장착 할 수 있습니다.
또한 "Remvoe All Attached Assets" 을 통해 해당 Mesh를 제거할 수 있습니다.
- Step 2 ( C++ 코드 작성 )

캐릭터의 스켈레톤에 존재하는 Weapon_R 소켓을 찾아 확인한 뒤,
NewObject로 동적으로 무기 컴포넌트를 생성하고,
메시와 스케일을 지정한 후,
RegisterComponent()로 월드에 등록,
마지막으로 AttachToComponent()를 이용해 캐릭터의 손 소켓 위치/회전에 정확히 부착해주는 코드입니다.

'Unreal Project > Unreal Study' 카테고리의 다른 글
| Animation 속도를 구간 별로 다르게 조절하는 방법 (0) | 2025.10.29 |
|---|---|
| Combo Attack 구현해보기 및 구조 정리하기 (0) | 2025.10.27 |
| Character Movement Component에 대하여 알아보 (0) | 2025.10.22 |
| Unreal Input Mapping 이란? (0) | 2025.10.17 |
| Unreal의 GameMode 에 관하여 알아보자! (0) | 2025.10.15 |
