
지금까지 배운 바로는 스켈레탈 메시란 인간형 캐릭터에만 적용하는 것이었다. 그런데 구매한 에셋을 살펴보니 자동차에도 스켈레탈 메시가 있어서 이는 무슨 용도인지 궁금해져서 알아보았다.

스켈레탈 메시를 열어보면 차량의 경우 문, 창문, 바퀴로 이루어진 것을 알 수 있다. 즉, 이것을 조정하여 바퀴를 굴러가게 하거나, 문을 열 수 있다.
바퀴에 애니메이션 적용
스켈레탈 메시의 경우 애니메이션이 없을 때 코드로 직접 뼈(Bone)를 움직여서 애니메이션을 창조할 수 있다.
트럭 바퀴처럼 회전만 하는 경우, 애니메이션 블루프린트만으로 움직임을 쉽게 만들 수 있다.

일단 애니메이션 블루프린트를 하나 만든다.

자동차 모양 스켈레톤을 선택해준다. SF 팩이라서 호버 차량같은 것도 있지만 간단한 움직임만 적용하고 싶어 바퀴달린 차량을 선택해주었다.

AnimGraph

뼈대를 움직이기 위해 Transform (Modify) Bone 노드를 생성하고, Component Pose에다가 Mesh Space Ref Pose를 연결해준다. 없어도 되지만, Warning이 뜨게 된다. 넣어주자.
- Mesh Space Ref Pose
- 입력 포즈가 없을 때 엔진의 기본 포즈를 가져와서 사용할 수 있게 해주는 노드
- 아무 애니메이션 데이터도 사용하지 않고 포즈를 처음부터 끝까지 만들 때 사용

여러 개의 뼈를 움직이고 싶다면 그만큼 Transform (Modify) Bone 노드를 만들어서 관리해야한다. 아니면 차량 클래스(Chaos Vehicle)의 Wheel Handler 노드를 사용한다.
Wheel Handler
1. Wheel Handler의 마법 (작동 원리)
이 노드는 단순히 뼈를 돌리는 게 아니라, **차량 블루프린트(Wheeled Vehicle Pawn)**에 들어있는 물리 연산 결과값을 실시간으로 가져와서 애니메이션에 투영합니다.
- 자동 매칭: 차량 설정 데이터(Wheel Setup)에 등록된 뼈 이름을 찾아서, 그 뼈에 회전(굴림)과 조향(꺾임), 서스펜션(위아래 움직임)을 한 번에 적용합니다.
- 노드 구성: 애니메이션 블루프린트의 AnimGraph에서 Component To Local 바로 앞에 이 노드 하나만 툭 던져 놓으면 끝납니다.
2. 사용을 위한 필수 전제 조건 (중요!)
지금 바로 Wheel Handler를 배치해도 아무 일도 일어나지 않거나 에러가 날 수 있습니다. 다음 조건이 충족되어야 합니다.
- 부모 클래스 확인: 트럭의 블루프린트가 일반 Pawn이나 Character가 아닌, **WheeledVehiclePawn**을 상속받아야 합니다.
- Chaos Vehicle 설정: 프로젝트 세팅에서 Chaos Vehicle 플러그인이 켜져 있어야 하며, 차량 블루프린트 내의 Vehicle Movement Component에서 각 바퀴의 뼈 이름이 정확히 등록되어 있어야 합니다.
- Anim Instance 부모 클래스: 애니메이션 블루프린트의 부모 클래스가 VehicleAnimationInstance여야 이 노드가 차량 데이터를 읽어올 수 있습니다.
3. 왜 지금 단계에서는 안 쓰나요?
질문자님이 현재 **"일단 바퀴가 돌아가는 것만 확인하고 싶다"**고 하셨기 때문에, Wheel Handler는 오히려 방해가 될 수 있습니다.
- 복잡한 셋업: 이 노드를 쓰려면 물리 휠 에셋(Wheel Asset)을 만들고, 타이어 마찰력, 서스펜션 강도 등을 다 설정해야 합니다. 단순히 숫자를 더해서 돌리는 지금 방식보다 세팅 시간이 10배는 더 걸립니다.
- 물리 기반: 이 노드는 "차량이 실제로 이동해야" 바퀴를 돌립니다. 지금처럼 제자리에서 애니메이션만 테스트하기에는 적합하지 않습니다.


속도에 따라 회전을 주기 위해 Rotator 변수인 Rotator와 floast 변수인 Speed를 만들어주었다.

Transform (Modify) Bone에다가 각각 좌우 앞바퀴를 할당하고, Rotation을 연결해주었다.
BlueprintGraph
Rotation을 계속 변하게 하기 위해 블루프린트 그래프를 아래와 같이 만든다.

Event Blueprint Update Animation을 통하여 매 프레임 화면이 갱신되도록한다.
Y축을 돌리면 바퀴가 앞뒤로 돌아가므로 조향이 없을 때는 Y축만 돌리면 된다.
- Speed는 기본 100으로 주고 Delta Time X를 적용하여 프레임에 맞도록 한다.
- Y축으로 따지면 뒷쪽방향이 +라서 -1을 곱해 방향을 뒤집어주었다.
- Rotation 변수를 Get으로 가져와 핀을 나누고 Y축만 연결한다.
- SetRotation으로 기존 Rotation값에 speed*Deltatime*-1 값을 더해주도록한다.
이렇게 해놓고 State Machine 등을 이용해 상태를 전환해주면 된다.
'게임 개발 > 학습 일지' 카테고리의 다른 글
| 언리얼 C++ - 인터페이스 기반 아이템 클래스 설계하기 (1) | 2026.04.21 |
|---|---|
| 언리얼 엔진 심화 2주차 - 컨테이너와 포인터 (0) | 2026.04.19 |
| 언리얼 C++ - Enhanced_input_System을 활용한 입력 매핑 구현하기 (0) | 2026.04.16 |
| 언리얼 C++ - Character 클래스를 이용한 캐릭터 구현하기 (0) | 2026.04.15 |
| TA 코스 2주차 과제 - 마법 구체 만들기 (0) | 2026.04.15 |