Skip to main content

🧭 Lesson 1.2: The Unreal Editor for Programmers

You don't need to be an artist to use the editor, but you do need to know where your code shows up and how the editor and your source files stay in sync. This is the editor tour written for someone who thinks in classes and files.

🎯 Learning Objectives

By the end of this lesson, you will be able to:

  • Identify the editor panels a programmer uses most and what each is for
  • Explain how a C++ class relates to the editor's Content Browser and the Details panel
  • Navigate the on-disk project layout and match folders to what you see in the editor
  • Use the Output Log, Play-In-Editor (PIE), and the C++ class wizard confidently

Estimated Time: 45 minutes

Engine Version: Unreal Engine 5.8

In This Lesson

The Editor at a Glance

When you open a project, the Unreal Editor presents a default layout. As a programmer, five regions matter to you far more than the rest:

graph TB Toolbar["Toolbar — Play, Platforms, Settings"] Viewport["Viewport — the 3D scene"] Outliner["Outliner — actors in the level"] Details["Details — properties of the selection"] Content["Content Browser — all project assets"] Log["Output Log — engine + your UE_LOG output"] Toolbar --- Viewport Viewport --- Outliner Outliner --- Details Details --- Content Content --- Log
Figure 1: The regions a C++ programmer touches most. Artists care about the Viewport; you'll care about Details, Content Browser, and the Output Log.

You do not have to master lighting, materials, or modeling to be productive. Your job is to write classes; the editor's job is to let you (and designers) instantiate, configure, and observe them.

Panels a Programmer Lives In

PanelWhat it isWhy you care
Content BrowserBrowser of all assets: Blueprints, materials, levels, and your C++ classes under a "C++ Classes" folderThis is where you'll create Blueprint subclasses of your C++ classes
DetailsShows the editable properties of whatever is selectedEvery UPROPERTY you expose appears here — this is your UI, for free
OutlinerThe list of actors placed in the current levelSelect an actor to inspect the C++ (or Blueprint) instance driving it
Output LogLive stream of engine messages and your logsYour UE_LOG and on-screen debug land here — your printf
Toolbar → PlayRuns the game inside the editor (PIE)Your fastest way to test C++ behavior without packaging

✅ Pro Tip

Enable Window → Output Log and dock it somewhere always-visible before you write any C++. You'll be reading it constantly — for your own logs and for compile/Live Coding messages.

How Code Reaches the Editor

This is the concept that trips up newcomers. When you write a C++ class and compile, the editor doesn't magically "see" your source files. Instead, a build step compiles your module into a binary (a DLL on Windows), and the editor loads that binary. Your classes then appear through the reflection system — the same bridge from Lesson 1.1.

graph LR A["You edit .h / .cpp"] --> B["Build compiles the module"] B --> C["Editor loads the binary"] C --> D["Reflection registers your UCLASS"] D --> E["Class appears in Content Browser
UPROPERTYs appear in Details"]
Figure 2: The path from a saved source file to a usable class in the editor. Module 2 explains the reflection step in depth.

Two practical consequences follow immediately:

  • A UCLASS you write shows up under Content Browser → C++ Classes → [YourProject]. You can right-click it to create a Blueprint child.
  • A property you mark with UPROPERTY(EditAnywhere) automatically appears in the Details panel — no UI code needed. The editor builds the widget from the type.
💡 Why this matters: "Expose it and the editor draws it" is one of Unreal's superpowers. Much of Module 2 and Module 6 is about controlling exactly how your C++ surfaces here.

The Project on Disk

The editor is a view onto a folder structure. Knowing that structure keeps you oriented, especially when things go wrong. A C++ project looks like this:

MyProject/
├── MyProject.uproject        # Project descriptor (modules, plugins, engine version)
├── Config/                   # .ini settings (DefaultEngine.ini, DefaultGame.ini...)
├── Content/                  # All assets you see in the Content Browser (.uasset/.umap)
├── Source/                   # Your C++ lives here
│   ├── MyProject/            # A game module
│   │   ├── MyProject.Build.cs        # Module build rules & dependencies
│   │   ├── MyProject.h / .cpp        # Module implementation
│   │   └── (your .h and .cpp files)
│   ├── MyProject.Target.cs           # Build target: the game
│   └── MyProjectEditor.Target.cs     # Build target: the editor
├── Plugins/                  # Optional plugins (often with their own Source/)
├── Binaries/                 # Compiled output (generated — not committed)
├── Intermediate/             # Build scratch (generated — safe to delete)
└── Saved/                    # Logs, autosaves, config caches (generated)

📖 Two folders, two worlds

Content/ holds assets (binary .uasset files) — what you see in the Content Browser. Source/ holds code (text .h/.cpp). A Blueprint lives in Content/; a C++ class lives in Source/. They meet through the reflection system.

⚠️ Watch Out

Binaries/, Intermediate/, Saved/, and DerivedDataCache/ are all generated. Never commit them to source control, and deleting them (then regenerating) is a standard fix for corrupted builds. We'll set up a proper .gitignore in Lesson 1.3.

Play-In-Editor & the Output Log

The Play button (or Alt+P) launches Play-In-Editor — your game running inside the editor process. It's the tightest test loop you have: no packaging, no separate launch. For C++ work, PIE plus the Output Log is your debugger's front porch.

Here's the smallest possible taste of code you'll write to see something in that log — don't worry about the syntax yet, we build up to it across the module:

// Somewhere in an actor's BeginPlay(), which runs when play starts:
void AMyActor::BeginPlay()
{
    Super::BeginPlay();

    // This line prints to the Output Log — your first "Hello, Unreal".
    UE_LOG(LogTemp, Warning, TEXT("Hello from C++! Actor: %s"), *GetName());
}

When you press Play, Hello from C++! appears in the Output Log, tagged as a warning (which makes it easy to spot in yellow). We cover UE_LOG properly in Lesson 2.6, but you'll be leaning on it from your very first class.

✅ Pro Tip

You can filter the Output Log by category and verbosity. Typing your log category name (e.g. a custom LogMyGame) into its search box hides the engine's firehose so you see only your own messages.

Hands-on Exercise & Quiz

🏋️ Exercise: Map the editor to the disk

Objective: Cement the editor ↔ filesystem relationship. If you have Unreal 5.8 installed you can do this live; if not, reason it through from Figure 2 and the tree above.

  1. In an open project, find Content Browser → C++ Classes. Which on-disk folder do those classes correspond to?
  2. Select any actor in the Outliner and look at the Details panel. Where did those editable fields come from, in C++ terms?
  3. Name two folders you would add to .gitignore and say why.
✅ Answers
  • 1. The Source/ tree — C++ Classes mirror your compiled module's classes, whose source is in Source/MyProject/.
  • 2. From UPROPERTY(EditAnywhere) (or similar) declarations — the editor generates each widget from the property's type and specifiers.
  • 3. Binaries/, Intermediate/, Saved/, DerivedDataCache/ — all generated, large, and machine-specific; committing them causes bloat and conflicts.

🎯 Quick Quiz

Question 1: A UPROPERTY(EditAnywhere) on your C++ actor shows up in which panel?

Question 2: Where does your C++ source physically live in the project?

Question 3: What does Play-In-Editor (PIE) give a C++ programmer?

Summary

🎉 Key Takeaways

  • As a programmer you live mainly in the Content Browser, Details, Outliner, and Output Log, plus the Play button.
  • Your code reaches the editor by being compiled into a module binary that the editor loads; the reflection system registers your classes and properties.
  • Content/ holds binary assets; Source/ holds your .h/.cpp. They meet through reflection.
  • Binaries/, Intermediate/, and Saved/ are generated — never commit them.
  • PIE + Output Log is your everyday test-and-observe loop.

📚 Additional Resources

🚀 What's Next?

You can find your way around. Now let's make the machine ready to compile: installing and configuring the C++ toolchain and IDE so your first build actually succeeds.

🎉 Lesson complete!

The terrain makes sense. Let's set up your tools.