티스토리 뷰
🟩 오늘의 목표
- 액터의 컴포넌트 구조를 이해하고 코드로 시각적 요소를 구현한다.
- 액터 라이프 사이클과 로그 시스템을 활용해 실행 흐름을 제어한다.
- DeltaTime을 활용한 프레임 독립적 트랜스폼 제어 기법을 습득한다.
- 리플렉션 시스템을 통해 C++ 코드를 에디터 및 블루프린트와 연동한다.
🟧 1. 액터 컴포넌트 구조와 리소스 할당
🟦 컴포넌트 기반 설계
액터의 기능을 구성하는 부품인 컴포넌트 시스템을 학습했다. 위치 정보만 가진 USceneComponent를 루트로 설정하고, 시각적 모델을 담당하는 UStaticMeshComponent를 부착(Attach)하여 액터의 계층 구조를 설계했다.
🟦 코드 기반 리소스 로드
ConstructorHelpers::FObjectFinder를 사용하여 C++ 코드 내에서 직접 스태틱 메시와 머티리얼 에셋을 경로 기반으로 찾아 할당하는 법을 익혔다. CreateDefaultSubobject를 통한 컴포넌트 생성과 초기화 과정을 거치며 액터가 월드에서 시각적으로 표현되는 원리를 이해했다.
🟧 2. 액터 라이프 사이클과 로그 디버깅
🟦 라이프 사이클 함수의 이해
액터가 생성되어 소멸하기까지의 과정인 라이프 사이클을 학습했다. 메모리 생성 시의 Constructor, 모든 컴포넌트 준비 완료 후의 PostInitializeComponents, 게임 시작 시의 BeginPlay, 매 프레임 호출되는 Tick, 그리고 제거 시의 EndPlay와 Destroyed의 호출 시점과 역할을 명확히 구분했다. 중요한 자원 정리는 호출 보장성이 높은 EndPlay에서 처리하는 것이 안전함을 배웠다.
🟦 로그 시스템 활용
UE_LOG 매크로와 DECLARE_LOG_CATEGORY_EXTERN을 사용해 고유한 로그 카테고리를 정의했다. LogTemp 대신 전용 카테고리를 사용함으로써 수많은 로그 속에서 내가 필요한 메시지만 필터링하여 디버깅 효율을 높이는 법을 익혔다.
🟧 3. 트랜스폼(Transform) 제어와 프레임 독립성
🟦 트랜스폼의 구성 요소
액터의 위치(Location), 회전(Rotation), 크기(Scale)를 아우르는 트랜스폼의 개념을 학습했다. FVector와 FRotator 구조체를 사용해 월드 및 로컬 좌표계에서 액터를 조작하는 함수들을 다뤘다.
🟦 DeltaTime을 활용한 움직임 구현
프레임 레이트(FPS)에 상관없이 일정한 속도를 유지하기 위해 DeltaTime을 곱해주는 로직을 적용했다. AddActorLocalRotation 함수에 RotationSpeed * DeltaTime을 전달하여 매 프레임 실행되는 Tick 함수 내에서도 초당 일정한 각도로 회전하는 로직을 완성했다.
void AItem::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
// 프레임 독립적인 회전 로직
if (!FMath::IsNearlyZero(RotationSpeed))
{
AddActorLocalRotation(FRotator(0.0f, RotationSpeed * DeltaTime, 0.0f));
}
}
🟧 4. 리플렉션 시스템과 하이브리드 워크플로우
🟦 리플렉션(Reflection)의 역할
C++ 클래스의 정보를 엔진 메타데이터로 등록하여 에디터나 블루프린트에서 활용하게 해주는 리플렉션 시스템을 학습했다. UCLASS(), GENERATED_BODY(), Item.generated.h 등의 매크로가 이 시스템을 위한 필수 요소임을 이해했다.
🟦 UPROPERTY와 UFUNCTION 매크로
변수와 함수에 리플렉션을 적용하여 에디터 노출 및 블루프린트 접근 권한을 세밀하게 제어했다. EditAnywhere를 통해 에디터에서 값을 즉시 수정하고 테스트하는 반복 작업의 효율성을 확인했다. 또한 BlueprintCallable, BlueprintPure, BlueprintImplementableEvent를 활용해 C++로 작성한 강력한 로직을 블루프린트 노드로 변환하여 디자이너와 협업할 수 있는 기반을 마련했다.
🟫 오늘 느낀 점
컴포넌트를 조립하고 라이프 사이클에 맞춰 로직을 배치하는 과정에서 언리얼 엔진의 정교한 설계 철학을 느꼈다. 특히 리플렉션 시스템을 통해 C++의 성능과 블루프린트의 편의성을 결합하는 '하이브리드 워크플로우'의 강력함을 체감했다. 코드 한 줄로 에디터 UI가 바뀌고 복잡한 연산이 노드로 변하는 과정을 보며, 대규모 프로젝트에서 협업을 위해 리플렉션 지정자를 정확히 사용하는 것이 얼마나 중요한지 깨달았다.
'내일배움캠프 Unreal_7기 > 본캠프' 카테고리의 다른 글
| TIL - 32일차 (0) | 2026.01.13 |
|---|---|
| TIL - 31일차 (1) | 2026.01.12 |
| TIL - 29일차 (2) | 2026.01.08 |
| TIL - 28일차 (0) | 2026.01.07 |
| TIL - 27일차 (0) | 2026.01.06 |

