Chapter 02

Blueprints in Practice

Where the Blueprint/C++ line sits, what goes wrong at scale, keeping graphs readable, and the three ways Blueprints talk to each other.

In this chapter

  1. Where the Line Sits
  2. The Downsides of All-Blueprint
  3. Keeping a Large Blueprint Readable
  4. Blueprint Interfaces
  5. Communicating Between Blueprints
1

Where the Line Sits

There is no correct ratio of Blueprint to C++. There is a defensible line, and being able to state yours is what matters.

Blueprints
  • Fast iteration and content
  • High-level gameplay flow
  • Level scripting and prototyping
  • UI logic and tuning
  • Anything a designer needs to touch
C++
  • Foundations and base classes
  • Hot paths and heavy math
  • Logic running every frame across many actors
  • Anything that benefits from code review
  • Anything needing clean source-control diffs

Blueprints hot-reload, they're visual, and they let designers self-serve without an engineering bottleneck. C++ runs at native speed and produces text you can diff, review, and refactor.

The deciding questions

The mature pattern is both: the framework lives in C++, the knobs and composition live in Blueprints. Chapter 3 covers how to build that boundary deliberately.

2

The Downsides of All-Blueprint

The fix is not "avoid Blueprints" — it's keep them thin. Collapse logic into functions, push reusable or heavy work into C++ or function libraries, and decouple with interfaces and dispatchers.

3

Keeping a Large Blueprint Readable

Watch the function/macro distinction when you refactor: a macro containing a Delay compiles in an Event Graph but errors the moment it's dropped into a Function. Chapter 12 covers the rule.

4

Blueprint Interfaces

A Blueprint Interface is a set of function signatures with no implementation, which any number of unrelated classes can implement. It lets you call a function on an actor without knowing its exact class: you ask "does this thing implement Interactable?" and if so, call Interact().

Interface vs. Cast

Cast ToInterface
Couples caller toA specific classA contract only
Adding new typesRequires modifying the callerZero caller changes
Reference costHard reference to the classNo hard reference
Best forKnown, owned relationshipsOpen-ended systems

5

Communicating Between Blueprints

Three canonical methods, and the mental model for choosing between them.

Rule of thumb. Known and owned → direct reference. Ask if you can → interface. Announce and let others react → dispatcher.

Prefer interfaces and dispatchers where you can. Hard references cause coupling and loading problems at scale, and both of these avoid them. Chapter 13 covers what an Event Dispatcher actually is underneath.

Interview drill

Answer each out loud before re-reading the chapter.

  1. When do you reach for Blueprints versus C++? Where is the line for you?
  2. What are the downsides of doing everything in Blueprints?
  3. How do you keep a large Blueprint readable and maintainable?
  4. What is a Blueprint Interface and when would you use one?
  5. How do you communicate between Blueprints, and when does each method fit?
← Chapter 1 ↑ Index Chapter 3 →