Unreal Engine C++ 기초집LESSON 04
첫 C++ Actor
난이도입문
예상 시간35분
선수지식3강의 프로젝트 구조
4강. 첫 C++ Actor
1. 이번 강의에서 해결할 문제
어떤 초기화는 생성자에, 어떤 초기화는 BeginPlay에 써야 하는지 불분명하고 모든 로직을 Tick에 넣기 쉽습니다. 배치 가능한 첫 Actor로 수명 주기의 책임을 구분합니다.
2. 학습 목표
3. 핵심 개념
Actor는 World에 배치하거나 런타임에 Spawn할 수 있는 객체입니다. 생성자는 클래스 기본 객체를 만드는 과정에도 호출될 수 있으므로 World의 다른 Actor를 찾는 작업에 적합하지 않습니다. 기본 Subobject 생성과 기본값 설정은 생성자, 플레이 시작 시 World 상태가 필요한 작업은 BeginPlay에 둡니다.
Tick은 매 프레임 호출되므로 명확한 연속 변화가 있을 때만 사용합니다. 이번 표적은 회전을 눈으로 확인하기 위해 제한적으로 Tick을 쓰고, 13강부터 일정 작업은 Timer로 옮깁니다.
4. 단계별 실습
파일 경로: Source/TopDownSurvival/Actors/SurvivalTarget.h
SurvivalTarget.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "SurvivalTarget.generated.h"
UCLASS()
class TOPDOWNSURVIVAL_API ASurvivalTarget : public AActor
{
GENERATED_BODY()
public:
ASurvivalTarget();
protected:
virtual void BeginPlay() override;
virtual void Tick(float DeltaSeconds) override;
UPROPERTY(EditAnywhere, Category = "Target", meta = (ClampMin = "0.0"))
float RotationSpeed = 45.0f;
};
파일 경로: Source/TopDownSurvival/Actors/SurvivalTarget.cpp
SurvivalTarget.cpp
#include "Actors/SurvivalTarget.h"
#include "Engine/Engine.h"
ASurvivalTarget::ASurvivalTarget()
{
PrimaryActorTick.bCanEverTick = true;
}
void ASurvivalTarget::BeginPlay()
{
Super::BeginPlay();
UE_LOG(LogTemp, Display, TEXT("SurvivalTarget 시작: %s"), *GetName());
}
void ASurvivalTarget::Tick(float DeltaSeconds)
{
Super::Tick(DeltaSeconds);
AddActorLocalRotation(FRotator(0.0f, RotationSpeed * DeltaSeconds, 0.0f));
}
Unreal Editor
- C++ ASurvivalTarget의 자식 Blueprint BP_SurvivalTarget을 만듭니다.
- 레벨에 배치하고 Rotation Speed를 90으로 바꿉니다.
- Play 후 Output Log와 회전을 확인합니다. Mesh는 6강에서 추가합니다.
5. 코드가 동작하는 이유
GENERATED_BODY는 Reflection과 생성 코드가 클래스에 연결될 자리를 만듭니다. TOPDOWNSURVIVAL_API는 다른 모듈에서 이 클래스를 사용할 때 필요한 내보내기 표시입니다. DeltaSeconds를 곱하면 프레임 수가 달라도 초당 회전량이 비슷해집니다.
6. 자주 하는 실수와 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
MINI QUIZ
0 / 2첫 C++ Actor 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
LESSON STATUS
4강. 첫 C++ Actor 미완료 상태학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.