언리얼 엔진 실무에서는 C++과 블루프린트를 함께 쓰는 경우가 많습니다. 핵심 시스템과 무거운 계산은 C++로 만들고, 수치 조정과 연출은 블루프린트에서 하는 방식입니다. 이 글은 C++ 클래스를 처음 만들 때 알아야 할 구조와, C++로 만든 기능을 블루프린트에서 쓰는 방법을 설명합니다.
왜 C++과 블루프린트를 함께 쓰는가
블루프린트는 만들기 쉽고 결과를 바로 볼 수 있지만, 기능이 많아지면 그래프가 복잡해지고 실행 속도도 C++보다 불리할 수 있습니다. 반대로 C++은 구조를 탄탄하게 짜기 좋고 빠르지만, 수정할 때마다 컴파일이라는 변환 과정을 거쳐야 합니다.
그래서 보통 프로그래머가 C++로 뼈대 클래스를 만들고, 그 클래스를 부모로 삼은 블루프린트에서 기획자나 아티스트가 모델, 소리, 수치를 연결합니다. 두 방식의 장점을 나눠 갖는 구조입니다.
준비할 것
- C++ 기초 문법: 클래스, 상속, 포인터, 참조, 헤더와 소스 파일의 구분
- 개발 도구: Visual Studio 또는 JetBrains Rider 같은 코드 편집기와 언리얼용 설정
- C++ 프로젝트: 처음부터 C++ 프로젝트로 만들거나, 블루프린트 프로젝트에 C++ 클래스를 추가해 전환
언리얼 C++은 일반 C++ 위에 엔진만의 규칙을 더한 형태입니다. 일반 C++을 모르면 엔진 규칙과 언어 규칙이 섞여 이해하기 어려우므로 기초 문법은 미리 익혀 두는 편이 좋습니다.
C++ 클래스의 기본 모양
에디터의 도구 메뉴에서 새 C++ 클래스를 만들면 부모 클래스를 고르라고 합니다. 레벨에 놓을 물체라면 Actor, 플레이어가 조종할 대상이라면 Character를 고릅니다. 그러면 헤더 파일(.h)과 소스 파일(.cpp)이 함께 생깁니다.
헤더 파일에는 클래스 이름 위에 UCLASS, 클래스 안에 GENERATED_BODY라는 표시가 들어 있습니다. 이 표시들은 언리얼이 클래스를 인식하고 에디터, 블루프린트, 저장 기능과 연결하는 데 필요한 정보입니다. 지우거나 위치를 바꾸면 컴파일 오류가 납니다.
블루프린트와 연결하는 매크로
| 표시 | 붙이는 대상 | 하는 일 |
|---|---|---|
| UPROPERTY | 변수 | 에디터 디테일 패널에 보이게 하거나 블루프린트에서 읽고 쓰게 합니다. |
| UFUNCTION | 함수 | 블루프린트에서 호출할 수 있는 노드로 만듭니다. |
| BlueprintImplementableEvent | 함수 선언 | C++에서는 부르기만 하고 실제 내용은 블루프린트에서 채웁니다. |
| BlueprintNativeEvent | 함수 선언 | C++에 기본 동작을 두고 블루프린트에서 덮어쓸 수 있게 합니다. |
예를 들어 체력 변수에 UPROPERTY를 붙이고 EditAnywhere와 BlueprintReadWrite 설정을 주면, 에디터에서 값을 바꿀 수 있고 블루프린트에서도 읽고 쓸 수 있습니다. 데미지 처리 함수에 UFUNCTION과 BlueprintCallable을 붙이면 블루프린트 그래프에서 그 함수를 노드로 꺼내 쓸 수 있습니다.
실습 흐름과 주의할 점
- Actor를 부모로 C++ 클래스를 만들고 회전 속도 변수와 회전 기능을 작성합니다.
- 컴파일한 뒤 이 클래스를 부모로 하는 블루프린트를 만듭니다.
- 블루프린트에서 메시와 속도 값을 지정해 레벨에 배치합니다.
- 같은 블루프린트를 여러 개 놓고 각각 속도를 다르게 줘 봅니다.
헤더 파일을 크게 바꾼 뒤에는 에디터를 닫고 다시 빌드하는 것이 안전합니다. 에디터를 켠 채 코드를 바로 반영하는 라이브 코딩 기능이 있지만, 클래스 구조를 바꾸는 변경은 제대로 반영되지 않는 경우가 있기 때문입니다. 또 엔진이 관리하는 객체를 가리키는 포인터에는 UPROPERTY를 붙여야 엔진이 메모리를 안전하게 관리할 수 있다는 점도 알아 두세요.
C++ 기초부터 배우려면
SBS아카데미게임학원 언리얼엔진(Unreal) 과정은 C언어와 C++ 단계로 시작해 블루프린트와 엔진 기능으로 넘어가도록 구성되어 있어, C++과 블루프린트를 함께 쓰는 흐름을 처음부터 익힐 수 있습니다.
자주 묻는 질문
언리얼 C++은 일반 C++과 많이 다른가요?
문법 자체는 같지만 UCLASS, UPROPERTY 같은 엔진 전용 표시와 언리얼만의 자료형, 메모리 관리 방식이 더해집니다. 일반 C++을 먼저 익히면 차이가 잘 보입니다.
블루프린트로 만든 것을 C++로 옮겨야 하나요?
꼭 그렇지는 않습니다. 성능이 문제 되거나 여러 곳에서 공통으로 쓰는 핵심 기능일 때 C++로 옮기는 것이 일반적입니다.
컴파일이 자꾸 실패하면 어떻게 하나요?
출력 창의 첫 번째 오류부터 확인하세요. 헤더 파일 포함 누락, 오타, 매크로 위치 오류가 흔한 원인입니다.
