[UE5] 언리얼 엔진 입문
[언리얼 입문] 5 - 언리얼 C++ 코드의 진입 방식과 구조 이해
지망셍
2025. 6. 2. 20:29
언리얼은 C++ 기반 게임 엔진이다.
블루프린트만으로 게임을 만들 수 있지만,
결국 언리얼의 진짜 힘은 C++ 구조를 이해하고 제어할 수 있을 때 발휘된다.
이번 편에서는 언리얼에서 C++ 코드는 어떻게 동작하고,
어디에서 시작하며, 어떤 구조로 확장되는지를 소개한다.
1. 언리얼의 C++ 클래스는 어떻게 생겼나?
언리얼의 C++ 클래스는 UCLASS()와 GENERATED_BODY()를 통해
리플렉션과 에디터 연동이 가능한 구조를 만든다.
UCLASS()
class AMyActor : public AActor
{
GENERATED_BODY()
public:
AMyActor();
protected:
UPROPERTY(EditAnywhere)
float Health;
UFUNCTION(BlueprintCallable)
void TakeDamage(float Amount);
};
- UCLASS() → 이 클래스가 언리얼 시스템과 연결될 수 있도록 지정
- UPROPERTY() → 에디터에서 보이게 하거나 저장, GC 추적에 포함
- UFUNCTION() → 블루프린트, 네트워크, 에디터 등과 연결 가능
2. Header(.h)와 Source(.cpp) 파일 구조
- .h 파일: 선언부 (클래스, 변수, 함수 시그니처)
- .cpp 파일: 정의부 (함수 구현, 초기화 로직 등)
// AMyActor.cpp
AMyActor::AMyActor()
{
PrimaryActorTick.bCanEverTick = true;
Health = 100.0f;
}
3. 클래스를 만들면 어떤 일이 벌어지는가?
- UnrealHeaderTool(UHT)이 .generated.h 파일을 생성한다
- 이 파일이 리플렉션, 직렬화, GC, Blueprint 연동 등을 자동으로 구성
- 모든 언리얼 C++ 클래스는 반드시 GENERATED_BODY()가 필요하다
4. C++ 클래스 생성 실습
- 언리얼 에디터 → "Tools > New C++ Class" 선택
- Actor 기반 클래스 생성
- Visual Studio가 열리고, 클래스가 추가됨
- Tick(), BeginPlay() 등 직접 구현 가능
5. C++ 클래스와 Blueprint 클래스의 관계
역할 설명
| C++ 클래스 | 논리적 베이스 (기능 정의) |
| 블루프린트 클래스 | C++ 클래스를 확장, 데이터 설정, 시각적 로직 구성 |
| 조합 방식 | “C++로 만든 클래스를 블루프린트로 Wrapping” |
예:
UCLASS(Blueprintable)
class AMyEnemy : public ACharacter
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintImplementableEvent)
void OnDeath(); // 블루프린트에서 구현 가능
};
6. 빌드 시스템 맛보기
- Build.cs: 이 모듈이 어떤 의존성, 설정을 갖는지 정의
- MyGame.Target.cs: 전체 프로젝트 빌드 설정
복잡해 보일 수 있지만 대부분 자동으로 설정된다.
필요할 때만 수정하는 것이 일반적이다.
7. 실전 설계 팁
- 블루프린트와 C++은 경쟁 관계가 아니라 보완 관계다
- 반복 로직, 성능 민감한 연산, 커스텀 시스템은 C++에서 처리
- UI, 연출, 이벤트는 블루프린트에서 연결
마무리하며
언리얼의 C++ 구조는 겉보기에는 복잡하지만,
패턴을 익히면 강력한 제어력과 확장성을 제공한다.
— 오브젝트, 실행 흐름, 블루프린트, 그리고 C++ —
모두를 연결할 수 있는 흐름을 익히는 것은
언리얼의 핵심 구조를 파악하는 첫걸음이 되어 줄 것이다.