티스토리 뷰
🟩 오늘의 목표
- DDS 파일의 불안정성을 파악하고 안정적인 텍스처 임포트 방식을 익힌다.
- 애니메이션 블루프린트(ABP)와 스테이트 머신의 구조를 이해하고, 복합적인 동작 전환(Idle, Walk, Jump 등)을 자동화하는 방법을 배운다.
- 캐릭터와 Pawn 각각의 특성에 맞는 이동 데이터 수집 및 애니메이션 연동 기법을 습득한다.
- 캐시 포즈와 Control Rig를 활용한 Foot IK 등 고급 애니메이션 기능을 적용하는 법을 배운다.
🟧 1. 에셋 및 컴포넌트 관리 트러블슈팅
🟦 텍스처 임포트 및 DDS 관리
.dds 파일은 포맷 파편화가 심하고 경로 문제로 임포트 실패가 잦다는 점을 확인했다. 이를 해결하기 위해 외부 컨버터를 통해 .png나 .tga로 변환하여 임포트하는 것이 가장 안전하며, 엔진 내부에서 최적화가 이루어지므로 개발 단계에서는 PNG를 써도 무방함을 이해했다.
🟦 메시 할당 규칙
Static Mesh(스태틱 메시)는 뼈대 정보가 없으므로 Skeletal Mesh Component에 직접 넣을 수 없다. 정적인 오브젝트를 다룰 때는 반드시 Static Mesh Component를 별도로 추가하여 할당해야 한다는 원칙을 학습했다.
🟦 Movable(무버블) 설정
액터를 코드나 블루프린트로 제어하려면 반드시 가동성을 무버블로 설정해야 하며, 이를 위해 UPROPERTY 노출이 선행되어야 함을 확인했다.
🟦 멈춤 버그 해결
키를 뗐을 때 속도가 0이 되지 않는 문제를 ETriggerEvent::Completed 바인딩과 코드 내 속도 명시적 초기화로 해결했다.
// Enhanced Input 바인딩 및 Move 함수 보완
EnhancedInput->BindAction(MoveAction, ETriggerEvent::Triggered, this, &AMyPawn::Move);
EnhancedInput->BindAction(MoveAction, ETriggerEvent::Completed, this, &AMyPawn::Move);
void AMyPawn::Move(const FInputActionValue& Value) {
FVector2D MoveInput = Value.Get<FVector2D>();
if (!MoveInput.IsNearlyZero()) {
// 이동 및 속도 계산 로직
} else {
CurrentGroundSpeed = 0.0f; // 입력 중단 시 속도 초기화
}
}
🟧 2. 캐릭터 구현 및 입력 시스템 (강의 내용)
🟦 GameMode와 캐릭터 클래스
게임의 규칙을 관리하는 GameMode의 역할에 대해 배웠다. 플레이어가 사용할 기본 캐릭터를 지정하는 방법을 익혔으며, 인체공학적 기능을 갖춘 Character 클래스를 활용해 3인칭 시점의 카메라 시스템을 구축하는 방법을 배웠다.
🟦 Enhanced Input 시스템
입력 액션(IA)과 입력 매핑 컨텍스트(IMC)를 설정하여 키보드 및 마우스 입력을 체계적으로 관리하는 법을 배웠다. Swizzle과 Negate 모디파이어를 사용하여 WASD 이동과 마우스 시점 회전 값을 보정하는 기술을 익혔다.
🟦 캐릭터 동작 및 스프린트 구현
SetupPlayerInputComponent를 통해 입력 액션과 C++ 함수를 바인딩하는 법을 배웠다. CharacterMovementComponent의 MaxWalkSpeed를 조절하여 기본 걷기와 스프린트(달리기) 기능을 전환하는 로직을 구현하는 방법을 배웠다.
🟧 3. 애니메이션 시스템 및 스테이트 머신 (강의 내용)
🟦 애니메이션 블루프린트(ABP)와 데이터 동기화
애니메이션 시스템의 핵심인 UAnimInstance 클래스를 상속받아 ABP를 생성하고 캐릭터와 연동하는 법을 배웠다. 이벤트 그래프에서 Velocity와 Is Falling 정보를 실시간으로 수집하여 애니메이션 변수를 갱신하는 구조를 익혔다.
🟦 Locomotion 스테이트 머신 설계
Idle, Walk, Run 상태를 정의하고 각 상태 간의 전환 조건(Transition Rule)을 설정하는 법을 배웠다. 속도에 따라 애니메이션을 자연스럽게 섞어주는 블렌드 스페이스(Blend Space) 활용법을 배웠다.
🟦 점프 및 낙하 라이프 사이클 구현
Jump, Fall Loop, Land 상태를 설계하여 캐릭터의 공중 동작을 완성하는 법을 배웠다. State Alias를 사용하여 지면에 닿았을 때 즉시 착지 상태로 전환되게 하는 효율적인 상태 관리 기법을 배웠다.
🟦 고급 기능: 캐시 포즈와 Foot IK
설계한 포즈를 캐시로 저장하여 재활용하는 법을 배웠다. Control Rig를 사용하여 경사진 지면에서도 발이 정확히 닿도록 보정해주는 Foot IK 적용 방법을 배웠다.
🟫 오늘 느낀 점
물리적 상태 데이터를 시각적인 동작으로 연결하는 과정이 매우 논리적임을 느꼈다. 입력의 마무리를 처리하는 디테일이 사용자 경험에 큰 영향을 준다는 점을 깊이 체감했다. 특히 스테이트 머신을 체계적으로 설계하는 방법을 배우며 대규모 프로젝트에서 구조 관리의 중요성을 느꼈다.
'내일배움캠프 Unreal_7기 > 본캠프' 카테고리의 다른 글
| TIL - 36일차 (1) | 2026.01.19 |
|---|---|
| TIL - 35일차 (1) | 2026.01.16 |
| TIL - 33일차 (0) | 2026.01.14 |
| TIL - 32일차 (0) | 2026.01.13 |
| TIL - 31일차 (1) | 2026.01.12 |

