Unreal Weapon Socket 다루기

2025. 10. 27. 16:00·Unreal Project/Unreal Study

 

Unreal에서 캐릭터에게 장비를 장착할려먼 어떻게 해야할까?

 

- Step 1  ( Bone Matrix에 대한 이해) 

캐릭터 T-Pose 모습

 

     

 게임의 3D 모델을 추출해보면 수많은 본(bone)으로 구성되어 있는 것을 확인할 수 있습니다. 

 (필자는 Blender를 사용하여 모델을 분석하였습니다.)

 

캐릭터는 기본적으로 Local Space 좌표계를 기준으로 존재하며, 여기에 World Matrix를 곱해

 

전역 좌표계(Global / World Space)로 변환되어 실제 게임 내 위치가 결정됩니다.

 

이와 동일하게 무기 역시 캐릭터와 완전히 동일한 공간(Local Space) 상에서 배치되어야 하며,
그래야 캐릭터의 애니메이션 및 움직임에 자연스럽게 연동됩니다.

 

 

    "왜 Local Space여야 하는가?"

 

라고 궁금즘을 가지고 계신 분도 있을 겁니다. 

 

그 이유는 캐릭터의 애니메이션 변환 행렬이 모두 Local Space를 기준으로 계산되기 때문입니다.


예를 들어, 팔의 회전이나 이동은 모두 캐릭터의 로컬 좌표계(Local Space)에서 이루어집니다.

 

따라서 무기 역시 팔의 움직임(=본의 로컬 변환)에 정확히 따라붙기 위해서는 Local Space에서 변환되어야 합니다.

 

물론 World Space에서 직접 위치와 회전을 매 프레임 갱신하는 방식도 가능하지만,


이 경우 본의 행렬을 매번 수동으로 곱해서 계산해야 하며,


애니메이션과의 정확한 동기화를 유지하기 어렵다는 치명적인 단점이 존재합니다.

 

즉, Local Space에서 부착하고 변환을 처리하는 것이 가장 자연스럽고 정확한 방식입니다.

 

Skeleton Tree

 

Unreal에서 캐릭터의 Mesh를 더블클릭하면 해당 창이 나오게 됩니다. 

 

그 중 캐릭터의 무기는 보통 모델러 분들이 Weapon_R로 뼈를 만들어 주십니다. 

(아닌 경우는 대부분은 손 뼈로 찾아보면 나옵니다.)

 

Weapon Preview

 

사진과 같이 "Add Preview Asset" 을 클릭하여 언리얼 에디터에 등록되어 있는데 Mesh를 캐릭터에게 장착 할 수 있습니다.

 

또한 "Remvoe All Attached Assets" 을 통해 해당 Mesh를 제거할 수 있습니다. 

 

 

- Step 2  ( C++ 코드 작성 ) 

Character BeginPlay()함수 안의 Weapon 장착 코드

 

캐릭터의 스켈레톤에 존재하는 Weapon_R 소켓을 찾아 확인한 뒤,


NewObject로 동적으로 무기 컴포넌트를 생성하고,


메시와 스케일을 지정한 후,


RegisterComponent()로 월드에 등록,


마지막으로 AttachToComponent()를 이용해 캐릭터의 손 소켓 위치/회전에 정확히 부착해주는 코드입니다.

 

 

캐릭터의 Bone Socket에 무기를 장착한 모습

 

 

 

 

 

 

'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
'Unreal Project/Unreal Study' 카테고리의 다른 글
  • Animation 속도를 구간 별로 다르게 조절하는 방법
  • Combo Attack 구현해보기 및 구조 정리하기
  • Character Movement Component에 대하여 알아보
  • Unreal Input Mapping 이란?
seonhwan2547
seonhwan2547
seonhwan2547 님의 블로그 입니다.
  • seonhwan2547
    seonhwan2547 님의 블로그
    seonhwan2547
  • 전체
    오늘
    어제
    • 분류 전체보기 (80)
      • Unreal Project (17)
        • Khazan 모작 프로젝트 (2)
        • Unreal Study (10)
        • Blueprint (5)
      • Directx11 Project (11)
        • Thymesia 팀 프로젝트 (8)
        • Kaku Ancient Seal 개인 프로젝트 (2)
        • Thymesia Animation Tool 개발 (0)
      • Algorithm (6)
        • Binary_Search (2)
        • Greedy (1)
        • Dynamic Programming (1)
        • A-star (1)
      • Coding Test (31)
        • Brutal Force (2)
        • Sort (5)
        • DFS (3)
        • Binary_Search (4)
        • BFS (6)
        • Hash (2)
        • Dynamic Programming (6)
        • Greedy (1)
        • BackTracking (1)
        • Binary_Tree (1)
      • STL Container (1)
        • unorded_set (0)
        • priority_queue (1)
      • C++ 공부 및 몰랐던점 (8)
        • Smart pointer (1)
      • Visual Studio 설정관련 공부 (1)
      • Console Project (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 블로그 소개
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Unreal
    hash
    GameProgramming
    blueprint
    Unreal Engine
    CodingTest
    Game Programming
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
seonhwan2547
Unreal Weapon Socket 다루기