Skip to main content

🎨 Introduction to Blueprints

Blueprints are Unreal Engine's powerful visual scripting system that lets you create gameplay logic, interactions, and complex behaviors without writing a single line of code. Using a node-based interface, you'll connect blocks of functionality to build everything from simple door mechanics to complete game systems. In this lesson, you'll discover what makes Blueprints special and create your first interactive Blueprint from scratch.

🎯 Learning Objectives

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

  • Explain what Blueprint visual scripting is and why it's powerful
  • Understand the different Blueprint types (Level Blueprint, Blueprint Classes, Actor Components)
  • Navigate the Blueprint Editor interface
  • Understand event-driven programming and how Blueprints execute
  • Create a simple interactive Blueprint Actor
  • Distinguish between Blueprints and C++ and when to use each
  • Compile and test Blueprint logic
  • Debug Blueprint execution with print statements

Estimated Time: 75-90 minutes

Prerequisites: Lesson 2.5 - Materials and Lighting Basics

📑 In This Lesson

What Are Blueprints?

Imagine you want a door that opens when the player presses a button. In traditional programming, you'd write code in a text editor—lines of functions, variables, if-statements, and loops. In Unreal Engine, you can do the same thing visually by connecting boxes (nodes) that represent actions, checks, and data.

📖 Definition

Blueprint Visual Scripting: A complete visual programming language built into Unreal Engine that uses a node-based interface to create gameplay logic, interactions, and systems. Instead of typing code, you drag and drop nodes representing functions, events, variables, and logic, then wire them together to define behavior.

Why Blueprints Are Revolutionary

Before visual scripting, game development was divided into two camps:

  • Programmers: Could write code and build complex systems, but needed to compile and restart to see changes
  • Designers/Artists: Had creative vision but couldn't implement ideas without a programmer's help

Blueprints changed everything. Now:

  • Anyone can script: No programming background required—if you understand "when this happens, do that," you can Blueprint
  • Instant feedback: Make changes and see results immediately without recompiling
  • Visual debugging: Watch values update in real-time, see execution flow highlighted
  • Rapid prototyping: Build and test gameplay mechanics in minutes, not hours
  • Powerful yet accessible: Can create everything from simple door logic to entire AI systems
  • Full engine integration: Every Unreal feature is accessible through Blueprint nodes

💡 Real-World Success Stories

Many commercially successful games use Blueprints extensively:

  • Fortnite: Epic's own battle royale uses Blueprints for gameplay mechanics, weapons, and interactive objects
  • Sea of Thieves: Rare used Blueprints for ship physics, water interaction, and player mechanics
  • Gears of War 4/5: Heavy Blueprint usage for AI behavior and gameplay systems
  • Indie games: Countless indie titles built entirely with Blueprints, no C++ required

Blueprints aren't just for prototyping—they're production-ready.

What Can Blueprints Do?

Blueprints can handle virtually any gameplay task:

Category Examples
Player Mechanics Character movement, jumping, shooting, inventory systems
AI Behavior Enemy patrol routes, chase logic, decision-making
Interactive Objects Doors, levers, buttons, pickups, destructible objects
Game Systems Scoring, health/damage, quest tracking, save/load
UI/Menus Main menus, HUD elements, pause screens, inventory screens
Visual Effects Spawn particles, trigger animations, material parameter changes
Audio Play sounds, music systems, spatial audio triggers
Multiplayer Client-server communication, replication, network events

Visual Scripting Explained

Let's understand how visual scripting works by comparing it to traditional text-based programming.

Text Code vs. Visual Nodes

Here's the same simple logic expressed both ways:

C++ Code (Text)

void AMyDoor::OnInteract()
{
    if (!bIsOpen)
    {
        bIsOpen = true;
        PlaySound(OpenSound);
        RotateDoor(90.0f);
    }
}

Blueprint (Visual)

A node graph showing:

  • Event: "OnInteract" (starting point)
  • Branch node: "Is Open?" (if-check)
  • Set node: "Set Is Open = True"
  • Function calls: "Play Sound", "Rotate Door"
  • Wires: Connect execution flow

Both accomplish the exact same thing. The visual version:

  • ✅ Is easier to read for non-programmers
  • ✅ Shows the flow visually—you can see the path execution takes
  • ✅ Can be modified without recompiling C++
  • ✅ Provides visual debugging (nodes light up during execution)

How Visual Scripting Works

flowchart LR
    A[Event Triggered] --> B{Condition Check}
    B -->|True| C[Execute Actions]
    B -->|False| D[Do Nothing]
    C --> E[Action 1: Play Sound]
    E --> F[Action 2: Rotate Door]
    F --> G[Action 3: Set Variable]
    G --> H[Complete]
    D --> H
    
    style A fill:#4CAF50,stroke:#2e7d32,color:#fff
    style B fill:#ff9800,stroke:#e65100,color:#fff
    style C fill:#2196F3,stroke:#1565c0,color:#fff
    style D fill:#9e9e9e,stroke:#616161,color:#fff
    style E fill:#667eea,stroke:#4527a0,color:#fff
    style F fill:#667eea,stroke:#4527a0,color:#fff
    style G fill:#667eea,stroke:#4527a0,color:#fff
    style H fill:#4CAF50,stroke:#2e7d32,color:#fff

Figure: Blueprint execution flow from event trigger through conditional logic to actions.

Key Visual Scripting Concepts

1. Nodes

Nodes are the building blocks—boxes that represent actions, functions, variables, or events. Each node has:

  • Execution pins (white): Control flow—which node runs next
  • Data pins (colored): Input/output values (numbers, text, objects)
  • Name/title: What the node does

Example nodes:

  • "Print String" - Displays text on screen
  • "Add" - Adds two numbers
  • "Play Sound" - Plays an audio file
  • "Spawn Actor" - Creates a new object in the world

2. Pins and Wires

Pins are connection points on nodes. You drag wires between pins to connect nodes:

  • Execution wires (white): Define the order nodes execute
  • Data wires (colored): Pass values between nodes

The flow is left-to-right: Execution starts at an event node (left) and flows right through connected nodes.

3. Events

Events are starting points—they fire when something happens, triggering a chain of nodes:

  • "BeginPlay" - Fires when the Actor starts (game begins)
  • "Event Tick" - Fires every frame (~60 times per second)
  • "OnBeginOverlap" - Fires when something touches a collision volume
  • "OnClicked" - Fires when player clicks on the Actor

✅ Think of it Like a Flowchart

If you've ever drawn a flowchart with boxes and arrows, you already understand Blueprints! Each box is a node, each arrow is a wire. "Start" boxes are events, diamond-shaped decision boxes are Branch nodes, and action boxes are function call nodes.

Blueprint Types

Unreal offers several types of Blueprints, each suited for different purposes. Understanding which to use is essential.

graph TD
    A[Blueprint Types] --> B[Level Blueprint]
    A --> C[Blueprint Class]
    A --> D[Blueprint Component]
    A --> E[Blueprint Interface]
    A --> F[Blueprint Macro Library]
    
    C --> C1[Actor Blueprint]
    C --> C2[Pawn/Character Blueprint]
    C --> C3[Game Mode Blueprint]
    C --> C4[Widget Blueprint UI]
    
    style A fill:#667eea,stroke:#4527a0,color:#fff
    style B fill:#4CAF50,stroke:#2e7d32,color:#fff
    style C fill:#2196F3,stroke:#1565c0,color:#fff
    style D fill:#ff9800,stroke:#e65100,color:#fff
    style E fill:#9c27b0,stroke:#6a1b9a,color:#fff
    style F fill:#00bcd4,stroke:#006064,color:#fff
    style C1 fill:#e3f2fd,stroke:#2196F3
    style C2 fill:#e3f2fd,stroke:#2196F3
    style C3 fill:#e3f2fd,stroke:#2196F3
    style C4 fill:#e3f2fd,stroke:#2196F3

Figure: The hierarchy of Blueprint types in Unreal Engine.

1. Level Blueprint

Every level has one Level Blueprint—it's level-specific logic that only exists in that particular map.

Use cases:

  • Level-specific events (opening a door when player enters an area)
  • Cinematics and scripted sequences
  • Controlling specific Actors in the level
  • Win/lose conditions for that level

Access: Blueprints menu → Open Level Blueprint

⚠️ Level Blueprint Limitation

Level Blueprints can't be reused—they're tied to one level. If you want reusable logic (a door that works in any level), use a Blueprint Class instead.

2. Blueprint Class

Blueprint Classes are reusable templates—you create them once, then place multiple instances in any level. They're the most common Blueprint type.

Use cases:

  • Interactive objects: Doors, chests, buttons, levers, pickups
  • Props with behavior: Spinning coins, flickering lights, moving platforms
  • Characters and enemies: Player controller, AI enemies, NPCs
  • Projectiles: Bullets, arrows, magic spells
  • Game systems: Spawn points, checkpoints, trigger volumes

Common Blueprint Class types:

Type Parent Class Purpose
Actor Blueprint Actor Generic objects placed in the world (doors, props, systems)
Pawn Blueprint Pawn Objects that can be possessed/controlled (characters, vehicles)
Character Blueprint Character Humanoid characters with built-in movement (players, NPCs)
Game Mode Blueprint Game Mode Base Defines game rules, win conditions, spawning
Player Controller BP Player Controller Handles player input and camera control
Widget Blueprint User Widget UI elements (menus, HUD, health bars)

Creating a Blueprint Class: Content Browser → Right-click → Blueprint Class → Choose parent class

3. Blueprint Component

Blueprint Components are reusable pieces of functionality you can add to any Actor Blueprint.

Think of Components as LEGO bricks: You snap them onto Actors to add abilities.

Example Components:

  • Point Light Component: Makes the Actor emit light
  • Static Mesh Component: Gives the Actor visible geometry
  • Collision Component: Adds collision detection
  • Movement Component: Handles physics and movement
  • Audio Component: Plays sounds
  • Custom Blueprint Components: You can create your own!

💡 Component Example: Rotating Pickup

Imagine a collectible coin Actor:

  • Static Mesh Component: The coin's 3D model
  • Rotating Movement Component: Makes it spin slowly
  • Box Collision Component: Detects when player touches it
  • Particle System Component: Adds a sparkle effect
  • Audio Component: Plays "ding!" when collected

Five components snapped together = one complete collectible!

4. Blueprint Interface

Blueprint Interfaces define functions that multiple Blueprint Classes can implement differently.

Use case: You want to send a message "React to Damage" to many different Actors (players, enemies, destructible crates), but each responds differently.

  • Player: Reduce health, play hurt animation
  • Enemy: Reduce health, play hit effect, aggro player
  • Crate: Break apart, spawn loot

With an Interface, you can call "TakeDamage" on any Actor, and each implements it their own way. This is advanced—we'll cover it in Module 4.

5. Blueprint Macro Library and Function Library

Macro Libraries and Function Libraries are collections of reusable Blueprint snippets you can call from anywhere.

  • Macros: Collapse commonly used node groups into a single reusable node
  • Functions: Reusable logic with inputs/outputs, like a mini-program
  • Function Libraries: Collections of utility functions available project-wide

Example: A "CalculateDistance" function library node you can use anywhere to find distance between two points.

Which Blueprint Type Should I Use?

Quick decision guide:

flowchart TD
    A{What are you making?} --> B{Does it exist only in one level?}
    B -->|Yes| C[Level Blueprint]
    B -->|No| D{Is it a reusable object?}
    D -->|Yes| E[Blueprint Class]
    D -->|No| F{Is it reusable functionality?}
    F -->|Yes| G[Component or Function Library]
    
    E --> H{What kind of object?}
    H -->|Interactive prop| I[Actor Blueprint]
    H -->|Player/enemy character| J[Character or Pawn BP]
    H -->|UI element| K[Widget Blueprint]
    H -->|Game rules| L[Game Mode Blueprint]
    
    style A fill:#667eea,stroke:#4527a0,color:#fff
    style C fill:#4CAF50,stroke:#2e7d32,color:#fff
    style E fill:#2196F3,stroke:#1565c0,color:#fff
    style G fill:#ff9800,stroke:#e65100,color:#fff
    style I fill:#e3f2fd,stroke:#2196F3
    style J fill:#e3f2fd,stroke:#2196F3
    style K fill:#e3f2fd,stroke:#2196F3
    style L fill:#e3f2fd,stroke:#2196F3

Figure: Decision tree for choosing the right Blueprint type.

The Blueprint Editor

When you open a Blueprint Class, the Blueprint Editor launches—this is your visual programming workspace.

Opening the Blueprint Editor

  1. In Content Browser, find a Blueprint asset (blue icon)
  2. Double-click to open
  3. The Blueprint Editor window appears

Blueprint Editor Interface

Blueprint Editor - BP_Door Compile Save Class Settings Play Event Graph Construction Viewport COMPONENTS ▾ BP_Door (self) ▸ DefaultSceneRoot ▸ DoorMesh (Static Mesh) ▸ TriggerBox (Box) ▸ OpenSound (Audio) MY BLUEPRINT ▾ Variables • bIsOpen (Boolean) • RotationSpeed (Float) ▾ Functions ƒ OpenDoor() ƒ CloseDoor() ▾ Event Graphs Event Graph Event BeginPlay Branch Condition True False Print String In String DETAILS ▾ Selected Node Print String ▾ Inputs In String: "Door is open!" ▾ Options ☑ Print to Screen ☐ Print to Log Duration: 2.0 ← Components & variables Main node graph canvas → Details panel →

Figure: The Blueprint Editor interface showing components, event graph canvas, and details panel.

Key Areas of the Blueprint Editor

1. Toolbar (Top)

Main actions:

  • Compile: Converts your visual script into executable code (green = success, red = errors)
  • Save: Saves your Blueprint changes
  • Class Settings: Configure Blueprint properties (parent class, replication, etc.)
  • Play: Quick test—launches the game to test your Blueprint

2. Tabs (Below Toolbar)

Different modes/views:

  • Event Graph: Main visual scripting canvas (where you spend most time)
  • Construction Script: Runs when the Actor is placed/moved in editor (setup logic)
  • Viewport: 3D preview of your Actor with Components
  • Functions: Custom functions you create

3. Components Panel (Left)

Shows all Components attached to this Blueprint:

  • Hierarchy of Components (parent-child relationships)
  • Add new Components with "+ Add" button
  • Select Components to configure in Details panel

4. My Blueprint Panel (Left, Below Components)

Overview of your Blueprint's structure:

  • Variables: Data storage (health, speed, isOpen, etc.)
  • Functions: Reusable logic chunks
  • Macros: Collapsed node groups
  • Event Graphs: All your event graphs listed

5. Event Graph Canvas (Center)

The main workspace—where you place and connect nodes:

  • Navigation: Right-click drag to pan, scroll wheel to zoom
  • Add nodes: Right-click in empty space, search for nodes
  • Connect nodes: Drag from output pin to input pin
  • Select nodes: Click to select, drag to move, Ctrl+Click for multi-select

6. Details Panel (Right)

Shows properties of the selected node or Component:

  • Input values for function nodes
  • Settings and options
  • Component properties (transforms, materials, collision)

✅ Pro Tip: Context-Sensitive Right-Click

Right-clicking in the Event Graph is your superpower. The menu shows nodes relevant to your current context:

  • Right-click from a variable → Get, Set, operators for that type
  • Right-click from execution pin → Events, flow control
  • Right-click from data pin → Nodes that use that data type
  • Right-click in empty space → All available nodes (searchable)

Master context-sensitive search and you'll be 10x faster!

Event-Driven Programming

Blueprints use event-driven programming—logic doesn't run continuously, it runs in response to specific events. Understanding this is crucial.

📖 Key Concept

Event-Driven Programming: Code executes in response to events (things that happen) rather than running in a continuous loop. An event fires → its connected nodes execute → execution stops until the next event. This is efficient and mirrors how games actually work.

How Events Work

sequenceDiagram
    participant Engine as Unreal Engine
    participant Blueprint as Your Blueprint
    participant Player as Game/Player
    
    Note over Engine,Player: Game Running (60 FPS)
    
    Player->>Engine: Press 'E' key
    Engine->>Blueprint: Fire "InputAction E" Event
    Blueprint->>Blueprint: Execute connected nodes
    Blueprint->>Engine: Play door animation
    Blueprint->>Engine: Play sound
    Note over Blueprint: Execution complete
    
    Note over Engine,Player: Waiting for next event...
    
    Player->>Engine: Collide with trigger
    Engine->>Blueprint: Fire "OnBeginOverlap" Event
    Blueprint->>Blueprint: Check if player
    Blueprint->>Engine: Display message
    Note over Blueprint: Execution complete

Figure: Event-driven execution sequence showing how events trigger Blueprint logic.

Common Blueprint Events

Event When It Fires Use Cases
Event BeginPlay When the Actor spawns or level starts Initialization, setup, cache references
Event Tick Every frame (~60 times/second) Continuous movement, rotation, timers
OnBeginOverlap When something enters a collision volume Triggers, pickups, damage zones
OnEndOverlap When something leaves a collision volume Exit triggers, area effects ending
OnClicked When player clicks on the Actor Interactive objects, buttons, selection
OnHit When the Actor collides with something Physics collisions, projectile impacts
OnDestroyed Right before Actor is destroyed Cleanup, spawn effects, save state
InputAction/Axis When player presses a mapped key/button Player controls, interaction prompts

Execution Flow

When an event fires, execution flows left-to-right through connected nodes:

flowchart LR
    A[Event Fires] -->|White wire| B[Node 1]
    B -->|Executes| C[Node 2]
    C -->|Executes| D[Node 3]
    D -->|Complete| E((End))
    
    style A fill:#e74c3c,stroke:#c0392b,color:#fff
    style B fill:#667eea,stroke:#4527a0,color:#fff
    style C fill:#667eea,stroke:#4527a0,color:#fff
    style D fill:#667eea,stroke:#4527a0,color:#fff
    style E fill:#4CAF50,stroke:#2e7d32,color:#fff

Figure: Blueprint execution flows left-to-right through connected nodes until complete.

Key points:

  • Execution follows white wires (execution pins)
  • Nodes execute in order, one after another
  • If there's no white wire connection, execution stops
  • Multiple outputs (Branch node: True/False) create different execution paths

Event Tick vs. Event-Based Logic

A common beginner mistake: overusing Event Tick.

❌ Bad: Event Tick Every Frame

Event Tick (60 times/sec)
  Check if player pressed 'E'
  Check if door is closed
  If both true, open door

This checks 60 times per second even if nothing happens. Wasteful!

✅ Good: Event-Based

Event InputAction 'E'
  Check if door is closed
  If true, open door

Only runs when 'E' is actually pressed. Efficient!

When to use Event Tick:

  • ✅ Continuous smooth movement (rotating platforms, scrolling textures)
  • ✅ Following/tracking (camera following player, enemy AI tracking)
  • ✅ Countdown timers
  • ✅ Interpolation (smooth transitions)

When NOT to use Event Tick:

  • ❌ Waiting for player input (use Input events instead)
  • ❌ Collision detection (use Overlap/Hit events instead)
  • ❌ One-time setup (use BeginPlay instead)
  • ❌ Checking for rare conditions (use event dispatchers or timers instead)

Creating Your First Blueprint

Let's walk through creating a simple interactive Blueprint Actor—a spinning collectible coin that disappears when touched.

Step-by-Step: Spinning Coin Blueprint

flowchart TD
    A[Create Blueprint Class] --> B[Add Static Mesh Component]
    B --> C[Configure Mesh & Collision]
    C --> D[Create Variables]
    D --> E[Add Event BeginPlay]
    E --> F[Add Event Tick for Rotation]
    F --> G[Add OnBeginOverlap Event]
    G --> H[Add Collection Logic]
    H --> I[Test & Debug]
    
    style A fill:#4CAF50,stroke:#2e7d32,color:#fff
    style B fill:#2196F3,stroke:#1565c0,color:#fff
    style C fill:#2196F3,stroke:#1565c0,color:#fff
    style D fill:#ff9800,stroke:#e65100,color:#fff
    style E fill:#667eea,stroke:#4527a0,color:#fff
    style F fill:#667eea,stroke:#4527a0,color:#fff
    style G fill:#667eea,stroke:#4527a0,color:#fff
    style H fill:#667eea,stroke:#4527a0,color:#fff
    style I fill:#4CAF50,stroke:#2e7d32,color:#fff

Figure: Workflow for creating your first Blueprint Actor.

Part 1: Create the Blueprint Class

  1. In Content Browser, navigate to Content/MyProject/Blueprints/
  2. Right-click in empty space → Blueprint Class
  3. Select Actor as parent class
  4. Name it BP_Collectible_Coin
  5. Double-click to open in Blueprint Editor

Part 2: Add Visual Mesh

  1. In Components panel, click + Add
  2. Search for "Static Mesh", add it
  3. Rename component to CoinMesh
  4. With CoinMesh selected, in Details panel:
    • Set Static Mesh to a cylinder or coin mesh (or use Starter Content)
    • Adjust scale if needed (e.g., 0.5, 0.5, 0.1 for flat coin)

Part 3: Add Collision

  1. Click + AddSphere Collision
  2. Rename to CollectionTrigger
  3. In Details panel:
    • Set Sphere Radius to cover the coin (e.g., 50)
    • Under Collision, check Generate Overlap Events

Part 4: Create Variables

  1. Switch to Event Graph tab
  2. In My Blueprint panel, click + Variable
  3. Name it RotationSpeed
  4. In Details panel, set type to Float
  5. Check "Instance Editable" (allows setting per-instance)
  6. Set Default Value to 100.0
  7. Click Compile to save

Part 5: Add Rotation Logic (Event Tick)

  1. Right-click in Event Graph → Add EventEvent Tick
  2. This event fires every frame with a "Delta Seconds" output (time since last frame)
  3. Drag from Event Tick's execution pin → search "Add Relative Rotation"
  4. Connect it
  5. On the AddRelativeRotation node:
    • Click the "Delta Rotation" pin
    • In Details, set Yaw (Z-axis) to connect to RotationSpeed variable
    • Multiply RotationSpeed by Delta Seconds (for smooth frame-independent rotation)

Node setup:

  • Event Tick → AddRelativeRotation
  • Get RotationSpeed → Multiply (by Delta Seconds) → Make Rotator (Yaw input) → AddRelativeRotation

Part 6: Add Collection Logic

  1. In Components panel, select CollectionTrigger
  2. In Details panel, scroll down to Events
  3. Click the green + next to "On Component Begin Overlap"
  4. This creates an event in the Event Graph
  5. From the event's execution pin:
    • Add Print String node → set text to "Coin Collected!"
    • Then add Play Sound at Location (optional, choose a pickup sound)
    • Then add Destroy Actor node (removes the coin from the world)

Part 7: Compile and Test

  1. Click Compile button (should turn green)
  2. Click Save
  3. Close Blueprint Editor
  4. Drag BP_Collectible_Coin from Content Browser into your level
  5. Press Alt+P to Play
  6. Walk into the coin—it should spin, display "Coin Collected!", and disappear!

✅ Congratulations!

You've just created your first functioning Blueprint Actor with:

  • Custom Components (mesh + collision)
  • A variable (RotationSpeed)
  • Event-driven logic (Tick for rotation, Overlap for collection)
  • Multiple node connections

This same pattern—setup, events, logic—applies to all Blueprint Actors!

Common First Blueprint Issues

Issue Cause Solution
Blueprint won't compile Syntax error, disconnected pins Check Compiler Results at bottom, fix red errors
Coin doesn't spin Event Tick not connected, wrong axis Verify white wire connects Tick → AddRelativeRotation
Overlap doesn't trigger Collision not configured Check "Generate Overlap Events" on collision component
Can't find node Wrong context or typo in search Right-click from correct pin type, check spelling
Changes don't show in level Blueprint not compiled/saved Compile, Save, and restart Play session

Blueprints vs C++

A common question: Should I use Blueprints or C++? The answer: Often both! They're designed to work together.

Comparison Table

Aspect Blueprints C++
Learning Curve ✅ Low—visual, intuitive ❌ Steep—requires programming knowledge
Iteration Speed ✅ Instant—no compilation ❌ Slow—compile C++ takes minutes
Visual Debugging ✅ Excellent—see values in real-time ⚠️ Traditional debugger
Prototyping ✅ Perfect—rapid testing ❌ Slower workflow
Performance ⚠️ Good for most tasks ✅ Faster execution
Complex Math/Logic ⚠️ Can get messy ✅ Clean, readable code
Team Accessibility ✅ Designers/artists can contribute ❌ Programmers only
Version Control ⚠️ Binary files (harder to merge) ✅ Text files (easy to merge)
Low-Level Access ❌ Limited to exposed functions ✅ Full engine access

When to Use Each

Use Blueprints For:

  • ✅ Rapid prototyping and iteration
  • ✅ Gameplay mechanics and interactions
  • ✅ Level-specific logic
  • ✅ UI and menus
  • ✅ Animation logic and blending
  • ✅ Sequencing and cinematics
  • ✅ Designer/artist-created content
  • ✅ Visual debugging and tuning

Use C++ For:

  • ✅ Core systems (inventory, save/load)
  • ✅ Performance-critical code
  • ✅ Complex algorithms and math
  • ✅ Custom engine features
  • ✅ Networking/replication logic
  • ✅ Plugin development
  • ✅ Third-party integrations
  • ✅ Functions Blueprints will call

The Hybrid Approach (Recommended)

Professional teams typically use both together:

flowchart TD
    A[C++ Base Classes] --> B[Blueprint Child Classes]
    A --> C[Blueprint-Callable Functions]
    B --> D[Designers/Artists Extend]
    C --> D
    D --> E[Final Game Content]
    
    A1[Example: C++ Character Base] --> B1[BP_Player inherits]
    A1 --> C1[Jump Function in C++]
    B1 --> D1[Designers add double-jump]
    C1 --> D1
    
    style A fill:#9c27b0,stroke:#6a1b9a,color:#fff
    style B fill:#2196F3,stroke:#1565c0,color:#fff
    style C fill:#9c27b0,stroke:#6a1b9a,color:#fff
    style D fill:#4CAF50,stroke:#2e7d32,color:#fff
    style E fill:#ff9800,stroke:#e65100,color:#fff

Figure: Hybrid workflow where C++ provides foundation and Blueprints extend functionality.

Workflow example:

  1. Programmer creates AWeapon C++ class with functions like Fire(), Reload()
  2. These functions are marked BlueprintCallable
  3. Designer creates BP_RocketLauncher Blueprint inheriting from AWeapon
  4. Designer adds rocket-specific visuals, sounds, fire rate in Blueprint
  5. Designer calls C++ Fire() function but customizes behavior in Blueprint

This combines the best of both: C++ performance and structure, Blueprint flexibility and iteration speed.

✅ Best Practice: Start with Blueprints

For new developers: Start with 100% Blueprints. You can build entire games without touching C++. Only move to C++ when you:

  • Hit performance bottlenecks (rare)
  • Need features not exposed to Blueprints
  • Have grown comfortable with Unreal and want deeper control

Many successful indie games are 100% Blueprint with zero C++!

Blueprint Best Practices

As your Blueprints grow, following best practices keeps them maintainable and performant.

Organization and Readability

1. Use Comments

Add comment boxes to explain sections of logic:

  • Select nodes → C key to create comment box
  • Type descriptive text: "Check if player has key"
  • Color-code comments for different sections

2. Group Related Logic into Functions

Instead of one giant Event Graph, break logic into functions:

  • My Blueprint panel → Functions → + Function
  • Name descriptively: OpenDoor, CalculateDamage, SpawnPickup
  • Call functions from events—keeps graphs clean

3. Naming Conventions

Use consistent, descriptive names:

Type Convention Example
Variables (boolean) b prefix bIsOpen, bHasKey
Variables (float) f prefix (optional) fSpeed, Health
Functions Verb + Object OpenDoor, DealDamage
Custom Events Descriptive action OnPlayerDeath, TriggerExplosion

4. Keep Graphs Clean

  • ✅ Align nodes horizontally/vertically (select multiple → Q to align)
  • ✅ Avoid wire spaghetti—use Reroute nodes for long wires
  • ✅ Delete unused nodes
  • ✅ Straighten wires (double-click wire to add bend point, drag to shape)

Performance Best Practices

1. Minimize Event Tick Usage

Event Tick runs every frame—use sparingly:

  • ❌ Bad: Check for conditions every tick
  • ✅ Good: Use Timers for periodic checks (Set Timer by Function Name)
  • ✅ Good: Use event-based triggers instead

2. Cache References

Don't repeatedly search for Actors—store references:

❌ Bad: Repeated Searches

Event Tick
  Get All Actors of Class (Player)
  Do something with player

Searches every frame—expensive!

✅ Good: Cache Once

Event BeginPlay
  Get Player Controller
  Store in PlayerRef variable

Event Tick
  Use PlayerRef variable

One search at start, then fast access!

3. Use Pure Functions

Pure functions (no execution pins, colored nodes) don't execute—they just return values. They're free!

  • Get Variable → Pure function (just returns value)
  • Math operations → Pure (Add, Multiply, etc.)

4. Profile and Optimize

Use Blueprint profiling tools:

  • Console command: stat game (shows performance stats)
  • Blueprint Profiler: Tools → Blueprint Profiler (shows which Blueprints are slow)
  • Focus optimization where profiler shows bottlenecks

Debugging Best Practices

1. Use Print String Liberally

Print String is your best friend for debugging:

  • Add Print String nodes to see execution flow
  • Print variable values: "Health: " + ToString(Health)
  • Use different colors for different messages

2. Use Breakpoints

Right-click a node → Add Breakpoint:

  • Game pauses when execution hits breakpoint
  • Inspect all variable values at that moment
  • Step through nodes one at a time (F10)

3. Watch Variables

Right-click a variable → Watch This Value:

  • Variable's value displays during Play
  • Updates in real-time
  • Great for seeing state changes

🏋️ Hands-On Exercise: Interactive Door Blueprint

Build a door that opens when the player approaches and closes when they leave.

Part 1: Create the Blueprint

  1. Content Browser → Right-click → Blueprint Class → Actor
  2. Name: BP_SlidingDoor
  3. Double-click to open

Part 2: Add Components

  1. Static Mesh Component: Add a Static Mesh, name it DoorFrame
    • Assign a wall/frame mesh
    • This stays stationary
  2. Static Mesh Component: Add another, name it DoorPanel
    • Assign a door mesh
    • Make it a child of DoorFrame (drag onto DoorFrame in hierarchy)
  3. Box Collision: Add Box Collision, name it TriggerVolume
    • Scale it to extend in front of door (where player approaches)
    • Enable Generate Overlap Events

Part 3: Create Variables

In My Blueprint panel, add these variables:

  1. bIsOpen (Boolean) - Tracks door state
  2. DoorOpenPosition (Vector) - Where door slides to when open
    • Set default: (0, 0, 200) - 200cm up
  3. DoorClosedPosition (Vector) - Original position
    • Set default: (0, 0, 0)
  4. DoorSpeed (Float) - How fast door moves
    • Set default: 2.0
    • Check "Instance Editable"

Part 4: Create OpenDoor Function

  1. My Blueprint → Functions → + Function
  2. Name it OpenDoor
  3. In the function graph:
    • Get DoorPanel reference
    • Call SetRelativeLocation on it
    • Connect DoorOpenPosition to New Location
    • Set bIsOpen to True
    • Add Print String: "Door Opening"

Part 5: Create CloseDoor Function

  1. Create another function: CloseDoor
  2. Similar to OpenDoor, but:
    • Use DoorClosedPosition
    • Set bIsOpen to False
    • Print "Door Closing"

Part 6: Hook Up Overlap Events

  1. Select TriggerVolume in Components
  2. In Details → Events → OnComponentBeginOverlap
  3. In the Event Graph:
    • Add a Branch node
    • Condition: NOT bIsOpen (only open if closed)
    • True branch: Call OpenDoor function
  4. Back to TriggerVolume Details → OnComponentEndOverlap
  5. In Event Graph:
    • Branch: Check if bIsOpen
    • True branch: Call CloseDoor function

Part 7: Test

  1. Compile and Save
  2. Drag BP_SlidingDoor into your level
  3. Play (Alt+P)
  4. Walk toward door → it should slide up
  5. Walk away → it should slide down
Checkpoint: What should you have?

Your Blueprint should have:

  • 3 Components: DoorFrame, DoorPanel, TriggerVolume
  • 4 Variables: bIsOpen, positions, speed
  • 2 Functions: OpenDoor, CloseDoor
  • 2 Overlap Events: BeginOverlap, EndOverlap
  • Door moves when you approach/leave
Congratulations—you've built a fully interactive prop!

Challenge: Add Smooth Animation

Current door teleports instantly. Make it slide smoothly:

  1. Instead of SetRelativeLocation, use VInterp To (Vector Interpolate)
  2. Call it from Event Tick (only when door is moving)
  3. Interpolate from current position toward target position
  4. Use DoorSpeed as the InterpSpeed parameter

Hint: You'll need a "TargetPosition" variable and check if DoorPanel has reached it.

Summary

Blueprints are Unreal Engine's visual scripting superpower, enabling anyone to create complex gameplay without writing traditional code. You've learned the foundations—now it's time to build!

Key Takeaways

  • 🎨 Blueprint Visual Scripting uses nodes and wires instead of text code—accessible to everyone
  • 📦 Blueprint Types: Level Blueprints (level-specific), Blueprint Classes (reusable), Components (modular)
  • 🖥️ Blueprint Editor has Components panel, Event Graph canvas, and Details panel for visual programming
  • Event-Driven: Logic executes in response to events (BeginPlay, Tick, Overlap, Input), not continuously
  • 🔗 Execution Flow: White wires connect nodes left-to-right, defining execution order
  • 🔧 Components are LEGO bricks—snap them onto Actors to add functionality
  • ⚖️ Blueprints vs C++: Use Blueprints for rapid iteration and gameplay, C++ for core systems and performance
  • 📏 Best Practices: Use comments, create functions, cache references, minimize Tick usage
  • 🐛 Debugging: Print String, breakpoints, and watch values are your debugging toolkit
  • 🎯 Hybrid Approach: C++ provides foundation, Blueprints extend and customize

What's Next?

Now that you understand Blueprint basics, the next lesson will dive deeper into Lesson 3.2: Blueprint Communication and Variables. You'll learn how to make Blueprints talk to each other, manage data with variables, and create complex interactions between multiple Actors.

✅ Self-Check Quiz

Before moving on, make sure you can answer these questions:

  1. What's the difference between a Level Blueprint and a Blueprint Class?
  2. What are the three main panels in the Blueprint Editor?
  3. What's an event and how does it trigger Blueprint execution?
  4. Why should you avoid overusing Event Tick?
  5. What are Blueprint Components and how do they work?
  6. When should you use Blueprints vs. C++?
  7. What's the purpose of the white execution wires vs. colored data wires?
📝 Show Answers
  1. Level Blueprints are level-specific and can't be reused. Blueprint Classes are reusable templates you can place in any level multiple times.
  2. Components panel (left), Event Graph canvas (center), and Details panel (right).
  3. An event is a starting point that fires when something happens (like BeginPlay, Tick, or Overlap). When it fires, execution flows through its connected nodes.
  4. Event Tick runs every frame (~60 times/second). Overusing it wastes performance checking conditions that rarely change. Use event-based triggers instead.
  5. Components are modular pieces of functionality (like Static Mesh, Collision, Audio) that you snap onto Actors to give them abilities. They're like LEGO bricks.
  6. Use Blueprints for rapid prototyping, gameplay mechanics, level-specific logic, and designer-accessible content. Use C++ for core systems, performance-critical code, complex algorithms, and features Blueprints will call.
  7. White execution wires control the order nodes execute (flow control). Colored data wires pass values (numbers, objects, etc.) between nodes.