본문 바로가기

교재 목차

언리얼 C++의 객체 모델과 게임플레이 코드에서 UI·저장·네트워크·최적화·배포까지 게임 프로젝트로 연결합니다.

언리얼 C++는 일반 C++과 달리 엔진의 규칙을 함께 알아야 해서 처음에는 진입 장벽이 높게 느껴질 수 있습니다. 같은 클래스라도 리플렉션 매크로를 붙였는지, 어떤 객체가 그 값을 가지고 있는지, 에디터에서 어느 인스턴스를 고쳤는지에 따라 결과가 달라지기 때문입니다. 그래서 이 교재는 문법 설명보다 엔진의 구조와, 코드를 고치고 에디터에서 확인하는 흐름을 먼저 잡아 실전에서 바로 쓰는 개발 습관을 만드는 데 집중합니다.

기초 개념을 익힌 뒤에는 게임플레이, 월드 구성, 물리, UI, 저장, 네트워크, 최적화, 배포로 차례로 넓혀 갑니다. 각 장은 클래스를 작성하는 방법뿐 아니라, UE5에서 어떤 생명 주기와 권한 모델을 따라야 하는지도 함께 설명합니다. UObject, 컴포넌트, 복제처럼 오해가 잦은 부분은 자주 하는 실수와 함께 정리했고, 경로, 값, 예상 결과를 글로 적어 그림 없이도 같은 절차를 따라갈 수 있게 했습니다.

이 교재의 메뉴, 클래스, 설정 이름은 2026년 11월 기준 최신 정식 버전인 언리얼 엔진 5.8(핫픽스 5.8.4)을 따릅니다. 예제 코드는 직접 빌드하고 실행해 옮긴 것이 아니라, Epic Games의 공식 문서와 API 레퍼런스에 적힌 클래스와 동작을 기준으로 확인해 쓴 것입니다. 본문에 나오는 출력과 수치는 예제의 조건에서 코드를 따라가 얻은 예상이므로, 직접 빌드해 보고 결과가 다르면 어느 단계에서 갈라졌는지 따라가 보세요. 에디터 버전에 따라 메뉴 위치나 표시 이름이 조금 다를 수 있습니다.


첫 목표: 탄약 하나를 줍고 저장하기

먼저 코드 클래스와 에디터의 실제 대상을 연결한 뒤, 탄약 습득, HUD(화면 UI), 저장으로 이어지는 작은 기능을 만듭니다. 네트워크와 운영까지 한 번에 구현하기보다, 이 로컬 흐름에서 값이 어디서 바뀌는지 설명할 수 있는 것을 첫 목표로 삼습니다.

12장의 프로젝트 기획과 설계에서 목표와 준비를 정하고, 게임 시스템 구현에서 탄약 습득과 저장, 복원 코드를 연결하며, 디버깅과 테스트에서 예상과 다른 결과가 나올 때 확인할 곳을 정리합니다. 저장 파일이 없는 상태에서의 목표는 0/30 → 픽업 뒤 10/30 → 저장 → 새 실행에서 10/30 복원입니다. 단일 로컬 독립 실행(Standalone)을 기준으로 하며, 유효한 저장 파일이 이미 있는 슬롯이라면 처음 값 0 대신 저장값을 불러옵니다.

이 예제는 코드와 파일, 에셋이 각각 맡는 일을 설명하며, 내려받아 바로 여는 완성 프로젝트는 아닙니다. 현재 플레이어의 Character, Controller, GameMode, HUD와, 이동과 카메라 입력, 활성 입력 매핑 컨텍스트(IMC), 실제 레벨, HUD 위젯 블루프린트, 픽업 블루프린트, 저장 입력을 준비해야 합니다. 이미 조작할 수 있는 프로젝트가 있다면 그것을 다시 쓰고, 코드 클래스와 현재 레벨에서 고른 클래스가 같은지 확인합니다.

저장은 별도의 UMyAmmoSaveGame에 탄약 정수만 담고, 슬롯 AmmoLoopSlot과 사용자 인덱스 0을 씁니다. 읽은 값은 현재 폰이 준비된 뒤에 적용합니다. 레벨에 놓인 픽업의 소모 상태, 네트워크, 플레이어를 바꾸는 전체 흐름까지 저장하거나 구현하는 예제는 아닙니다.


시작하기 전에 준비할 것

일반 C++의 변수, 조건문, 함수, 클래스, 상속, 포인터와, .h의 선언과 .cpp의 정의를 읽을 수 있는 수준을 전제로 합니다. 이 부분이 낯설다면 C++ 교재를 먼저 보고 오세요. 언리얼의 리플렉션, 객체 수명, GameMode, Controller, Pawn의 역할은 이 트랙에서 익힙니다. 에디터에서 에셋을 찾고 레벨을 저장하는 작업이 처음이라면 언리얼 기본 교재로 에디터에 먼저 익숙해지는 것도 좋습니다.

쓸 엔진의 세부 버전과 운영 체제를 기록하고, 개발 환경 설정에서 버전별 요구 사항을 확인하세요. 이 교재의 도구 설정은 Windows의 Visual Studio, MSVC, Windows SDK를 기준으로 하며, 다른 운영 체제에서는 해당 엔진 버전에 맞는 도구 체인을 따로 확인합니다.

첫 번째 C++ 프로젝트 생성부터는 같은 프로젝트 경로와 엔진 버전을 씁니다. 에디터 타깃의 빌드가 끝났는지, 다시 연 에디터에서 코드 클래스와 실제 에셋, 인스턴스를 찾을 수 있는지를 차례로 확인합니다. IDE가 열렸다고 해서 빌드나 플레이가 성공한 것은 아닙니다.

다만 예제 헤더에 붙은 API 매크로는 장에 따라 다릅니다. 2장과 3장은 MyFirstCPPProject 모듈의 MYFIRSTCPPPROJECT_API를 쓰고, 4장부터는 모듈 이름을 MyProject로 가정한 MYPROJECT_API를 쓰므로, 직접 만든 프로젝트에서는 마법사가 만든 자기 모듈의 매크로로 바꿉니다.


세 구간으로 나눈 핵심 경로

교재 전체를 읽지 않더라도, 다음 세 구간을 거치면 첫 목표인 탄약 흐름을 완성할 수 있습니다.

구간읽을 범위마친 뒤 확인할 것
엔진의 기본 흐름1장에서 3장까지, 4장에서 필요한 월드 구성코드 클래스와 블루프린트, 현재 레벨 설정이 가리키는 실제 대상
값의 변화 연결트리거 박스와 오버랩 이벤트, 데이터 바인딩과 HUD 시스템, SaveGame 시스템을 거쳐 12장습득한 탄약이 HUD에 반영되고 같은 슬롯에서 저장, 복원되는 절차
선택 확장8장의 네트워크, 9장과 10장의 성능과 배포, 11장의 심화로컬 목표 뒤에 필요한 권한, 대상 환경, 성능 조건을 따로 넓히기

8장 이후는 첫 목표를 마친 뒤 필요한 주제가 생겼을 때 돌아와 읽어도 되는 확장입니다. 탄약 흐름을 완성하는 데 네트워크 복제나 플러그인 개발까지 모두 익힐 필요는 없습니다.


학습 경로

교재 전체를 차례로 읽는다면 다음 다섯 단계로 따라가세요.

1단계 · 엔진과 C++ 기본(1–2장)에서는 언리얼 엔진의 특징과 구조, 개발 환경 설정, 첫 C++ 프로젝트 생성, 에디터의 주요 패널을 익힙니다. 이어 리플렉션 시스템과 UPROPERTY, UFUNCTION, AActor와 UObject의 차이, C++ 클래스를 블루프린트로 확장하는 방법, 게임 루프와 게임 프레임워크의 주요 클래스를 다룹니다.

2단계 · 게임플레이와 월드(3–5장)에서는 Pawn, Character, Controller의 관계와 향상된 입력(Enhanced Input), 컴포넌트 시스템, 애니메이션 블루프린트와의 연동으로 플레이어를 움직입니다. 그리고 조명, 카메라, 메시로 장면을 구성하고, 액터를 생성하고 관리하며, 레벨 스트리밍과 World Partition으로 큰 월드를 나눕니다. 마지막으로 충돌 채널과 프로파일, 오버랩 이벤트, 물리 시뮬레이션, 라인 트레이스로 월드와 상호작용합니다.

3단계 · UI와 데이터(6–7장)에서는 UMG의 위젯 구조, C++에서 위젯을 만들고 제어하는 방법, HUD와 데이터 연결, UI 입력과 애니메이션을 다룹니다. 이어 SaveGame 시스템, 직렬화와 역직렬화, 파일 입출력과 JSON, 사용자 설정 저장으로 데이터를 보관하고 다시 불러옵니다.

4단계 · 네트워크, 성능, 배포(8–10장)에서는 언리얼 네트워킹의 기본 개념, 복제, RPC, 멀티플레이어 최적화로 서버와 클라이언트의 역할을 나눕니다. 그리고 프로파일링 도구, 메모리 관리, 렌더링 최적화, CPU와 GPU 병목 해결로 성능을 측정하고 개선합니다. 마지막으로 플랫폼별 빌드와 패키징, 로그 관리, 핫픽스와 업데이트, 클라우드와 서버 관리로 게임을 내보내고 운영합니다.

5단계 · 심화와 실전 프로젝트(11–12장)에서는 플러그인 개발, 에디터 확장과 커스텀 툴, AI와 행동 트리, 머신러닝과 실시간 렌더링 기술을 살펴봅니다. 마지막 12장에서는 지금까지 배운 내용을 모아 작은 탄약 프로젝트를 기획하고, 구현하고, 디버깅하고 테스트한 뒤, 출시와 운영에서 준비할 것을 정리합니다.

장마다 예제와 시작 상태가 다르므로, 하나의 게임을 12장 내내 이어서 완성하는 과정으로 보지는 마세요. 관심 있는 주제부터 읽을 때도 그 글에서 필요한 준비물과 앞선 글을 먼저 확인합니다.


다른 교재로 이어 가기

에디터 사용법과 레벨, 조명, 머티리얼처럼 코드 밖의 기초는 언리얼 기본에서 다룹니다. C++ 클래스 위에서 게임 로직을 그래프로 빠르게 만들고 다듬고 싶다면 언리얼 블루프린트를, 파티클 효과를 더 깊이 다루고 싶다면 언리얼 나이아가라를 참고하세요.


장별 목차


만든 코드를 돌아볼 때

언리얼 C++ 학습은 코드 작성, 에디터 설정, 빌드 확인, 실행 중의 검증을 한 사이클로 묶을 때 가장 빠르게 안정됩니다. 기능을 하나 더할 때마다 네 가지를 짚어 보세요. 첫째는 값을 가진 객체로, 이 값은 어느 클래스의 어느 인스턴스에 있고 다른 객체는 어떤 참조로 그 값에 닿는가입니다. 둘째는 객체의 수명으로, 이 객체는 언제 만들어지고 사라지며 가비지 컬렉션이 그 참조를 볼 수 있는가입니다. 셋째는 리플렉션으로, 블루프린트나 에디터, 저장, 네트워크가 이 속성과 함수를 알아야 한다면 알맞은 매크로와 지정자를 붙였는가입니다. 넷째는 확인할 위치로, 결과가 다를 때 처음 로그를 남기거나 중단점을 걸 곳이 어디인가입니다.

예를 들어 탄약 흐름이라면 현재 탄약을 어느 캐릭터가 가지고 있는지, 픽업이 그 값을 어떻게 바꾸도록 요청하는지, HUD와 저장 파일이 언제 그 값을 읽는지를 말로 설명해 봅니다. 트랙 전체를 마친 뒤에는 객체 수명과 소유권, 리플렉션, 네트워크 권한, 배포 조건을 하나의 프로젝트 흐름으로 이어 설명할 수 있는지 확인해 보세요.