Chapter 01

Getting Started with Unreal Engine

How to structure a project, what each folder and file does, and how the Unreal Editor works as a continuously running engine.

In this chapter

  1. The C++ + Blueprint Project Model
  2. Project Structure & Key Files
  3. Organizing Code by Responsibility
  4. The Editor as a Running Engine
1

The C++ + Blueprint Project Model

When creating a new Unreal project, you have the option of a Blueprint-only project or a C++ + Blueprint project. Always start with C++ + Blueprint, even if you plan to write mostly Blueprints.

Migrating from a Blueprint-only project to C++ later is far more disruptive than starting hybrid from the beginning. Starting with C++ keeps your options open at zero cost.

The two layers have clearly defined roles:

C++ defines
  • Structure and architecture
  • Rules and constraints
  • Default values and behaviors
  • What can happen
Blueprints define
  • Behavior composition
  • Tuning and configuration
  • Logic flow and sequencing
  • When, where, and with what values it happens

Think of C++ as writing the rules of a board game, and Blueprints as deciding how a particular player chooses to play within those rules.


2

Project Structure & Key Files

A C++ Unreal project has a well-defined folder layout. Understanding what each part does prevents you from treating the project as a black box.

MyProject/
├── MyProject.uproject      ← Critical config file
├── Source/                 ← All C++ code lives here
│   └── MyProject/
│       ├── MyProject.Build.cs
│       ├── MyProject.h / .cpp
│       └── ... your classes ...
├── Content/                ← All assets (meshes, BPs, textures)
├── Config/                 ← Engine and project .ini settings
├── Binaries/               ← Compiled output (do not commit)
├── Intermediate/           ← Build artifacts (do not commit)
└── Saved/                  ← Logs, backups (do not commit)

The .uproject File

The .uproject file is a JSON config that tells Unreal how to load and compile your project — which engine version to use, which plugins are enabled, and which modules exist. Always keep it under version control. Losing or corrupting it can make your project unloadable.

The Source Folder

Unreal does not treat Source/ as "just code." It is tightly integrated into the engine's reflection and build pipeline. The Unreal Build Tool (UBT) and the Unreal Header Tool (UHT) process your headers before the compiler ever sees them — generating the glue code that makes UCLASS, UPROPERTY, and UFUNCTION macros work.

Never manually move or rename files in the Source folder outside of Visual Studio or Rider. The build system tracks file paths and generated headers will become stale.

What to Commit to Version Control

CommitIgnore
Source/Binaries/
Content/Intermediate/
Config/Saved/
.uproject*.sln (regenerate on demand)

3

Organizing Code by Responsibility

A common mistake is organizing code by class type — putting all actors in one folder, all components in another. Unreal projects scale better when organized by gameplay domain (responsibility), not by technical type.

✗ By class type (avoid)
  • Source/Actors/
  • Source/Components/
  • Source/Interfaces/
✓ By responsibility (prefer)
  • Source/Player/
  • Source/Weapons/
  • Source/AI/
  • Source/UI/
  • Source/Interaction/

This structure makes it obvious where new logic belongs. It also naturally prevents "god classes" — bloated classes that accumulate unrelated responsibilities because everything lived in the same flat folder and it was easier to just add another function.

Apply the same principle to your Content/ folder. Group Blueprints, meshes, and materials by feature domain, not by asset type.

The guiding rule for everything in your project: C++ defines behavior and constraints. Content defines composition and tuning. A weapon's damage falloff curve belongs in a data asset, not hardcoded in C++. A character's jump height belongs in a Blueprint property exposed from C++, not buried in a constructor.


4

The Editor as a Running Engine

The Unreal Editor is not a static authoring tool. It is a live, running instance of the engine. Even when you are not in Play-In-Editor (PIE) mode, the editor is continuously running:

This has practical implications:

Code that runs in the editor (construction scripts, editor-only WITH_EDITOR blocks, OnConstruction) must be defensive. It runs outside of a game world context and can crash the editor if it dereferences null pointers or assumes game state exists.

PIE vs. Standalone

Play-In-Editor spawns a game world inside the editor process — fast to iterate but shares memory with the editor. Standalone launches a separate process and is closer to shipping behavior. Always test in Standalone before calling something "done."

Hot Reload vs. Live Coding

Unreal supports recompiling C++ without closing the editor:

MethodWhat it doesWhen to use
Live CodingPatches compiled changes into the running processIterating on logic changes
Hot ReloadReloads the module DLLLegacy; prefer Live Coding in UE5
Full RebuildRecompiles everything from scratchAfter adding new UPROPERTY / UFUNCTION macros or changing headers
↑ Index Chapter 2 →