The goal of this page is to teach you how Unreal Engine, Blueprints and visual scripting works. Everything here should be understandable by someone who has never programmed or used Unreal Engine.

This page has a lot of content, you can easily navigate between categories using the Table of Contents on the right. If something is overwhelming you, you can skip it and come back later.

A lot of stuff such as tips are collapsed, I’ve done this to make the page more readable and easy to navigate, it doesn’t mean that it’s not important !

Access & getting started

Download Unreal Engine from the Epic Games launcher:

  • Click on “Unreal Engine” on the left side bar
  • On the top bar click on “Library”
  • Add the UE version you want
  • If needed, download extra content for your UE version by clicking on “Options” (after clicking on the small down arrow next to “Launch/Update/Install/Resume”)

Once you launched a engine version you will be able to load a existing project or create a new one using a template.

Tip

You can directly open a existing UE project with the correct engine version from the “My Projects” area

Other UE stuff such as your assets from your Fab library are accessible below the engine version, if some are missing try to refresh using the refresh button.

Interface anatomy

Here are the main components of the UE interface:

Global

Top bar (1)

Here you have access to more tools, as well as various settings for your window and project.

Tabs (2)

Where all opened tabs are shown

Details panel (3)

When you select an actor or asset, its properties and settings appear here, allowing you to tweak and configure various parameters.

Content browser (4)

It serves as your primary tool for managing assets, such as meshes, textures, materials, and blueprints

Viewport & Level

Viewport (1)

A view of the level

Outliner (2)

Displays a hierarchical list of all the actors in your current level, making it easy to select and organize them.

Tip

You can make folders to better organize your actors

External Top bar (3)

  • (3A) Mode: This panel contains various tools for editing your level, including landscape, foliage, and geometry tools.
  • (3B) Add actors.
  • (3C) Blueprint quick access.
  • (3D) Level Sequence.
  • (3E) Play control & settings.
  • (3F) Packaging options.
  • (3G) More settings.

Scalability settings

You can change the viewport scalability settings (also known as quality settings)

If the settings are different from High, you can change them from the top left of the viewport.

Inner top bar left (4)

  • Viewport settings
  • Viewport perspective
  • Viewport rendering method
  • Viewport displayed info

Inner top bar right (5)


Left to right:

  • Edit mode (Select, Move, Rotate, Scale)
  • Pivot mode (Global/Local)
  • Surface snapping
  • Move snapping
  • Rotate snapping
  • Scale scapping
  • Camera Speed
  • Show more viewports

World Settings (6)

A lot of settings on the current world (~= Level)

Blueprint

Graph view (1)

Here you can see and edit your blueprint code

Viewport (2)

Here you can see and move scene components inside the actor

Components (3)

Displays all components, you can edit or remove them or add some new ones.

Functions & Macros (4)

A list of the functions and macros your blueprint class have

Variables (5)

A list of the variables your blueprint class have

Engine anatomy & basics

Introduction

Conventions

Unreal Engine location, rotation and scale units are in centimeters.
In UE, the forward axis is X and the up axis is Z.

Coding

When you code in UE, you have two layers: the C++ layer and the Blueprint layer.
C++ can be mandatory to use special features or tools. C++ is also a lot faster than Blueprint code, which can make it a very important choice depending on what logic you want to execute in your game.

The Blueprint layer is built on top of the C++ layer, either on already existing engine classes or on yours that you made in C++, which means you don’t need to do anything in C++ and can work on your game with only the Blueprint layer (not recommended for big or multiplayer projects).

A Blueprint is an asset that inherits from a class, for example Actor (AActor being the real C++ name). In a blueprint you can already see/edit what is exposed from C++ (for example variables or components).

Actor blueprint hierarchy

Unlike other engines like Unity, you don’t create a empty “Game Object” then add components.
In UE you create a new blueprint asset, and this blueprint can already hold logic.

Warning

You can only create new blueprints from the content browser or using the Quick Add tool. This means that you can’t make a new and unique blueprint classes/instances directly in a level, it must exist in the Content Browser.

You can extend any Actor class with Actor Components, Scene Components or Interfaces.

  • A Actor Component don’t have any transform, it’s just a block of whatever logic attached to your actor.
  • A Scene Component is the same as an Actor Component but it has a transform and must be attached somewhere on your Actor (at the root of the actor or on any other Scene Component), it also support sockets.
  • For Interface see Interfaces

Info

More about Actors in Main classes

Playing in editor

When you test your game in the editor (!= packaged build), you are by default in PIE (Play In Editor).
You can find PIE settings here:

Structure

TODO

Check the graph or watch the video about the basics of engine structure here

Main classes

For new programmers

If you are new to programming or if you don’t know what a class, child or parent is please read Classes and inheritance before going any further !

Image source

Actor

“Actor is the base class for an Object that can be placed or spawned in a level. Actors may contain a collection of Actor Components, which can be used to control how actors move, how they are rendered, etc.” - UE Docs

Pawn

“Pawn is the base class of all actors that can be possessed by players or AI. They are the physical representations of players and creatures in a level.” - UE Docs

Character

“Characters are Pawns that have a mesh, collision, and built-in movement logic. They are responsible for all physical interaction between the player or AI and the world, and also implement basic networking and input models.” - UE Docs

Player Controller

“Player Controllers are used by human players to control Pawns.” - UE Docs

Player State

“A Player State is created for every player. Player States should contain game relevant information about the player, such as score, etc.” - UE Docs

Game Mode

“Defines the game being played. It governs the game rules, scoring, what actors are allowed to exist in this game type, and who may enter the game.” - UE Docs

Game State

“Is a class that manages the game’s global state, and is spawned by the Game Mode.” - UE Docs

Game Instance

“A high-level manager object for an instance of the running game. Spawned at game creation and not destroyed until game instance is shut down.” - UE Docs

Persists between levels - More about persistence

HUD

“Base class of the heads-up display. This has a canvas and a debug canvas on which primitives can be drawn.” - UE Docs
The HUD class can be used as a isolated area to manage to create, show, hide and destroy UserWidgets.

User Widget

“UserWidgets are used in Epic Games’ UI System, called Unreal Motion Graphics (UMG).” - Cedric
This is the class you will use to display text, menus, inputs and more.

To go further

Blueprints

A mix of my naming convention and what most people do: For Designers

Variables

Here is a list of the most used variables types.

Name & color
Description
Example of values
A booleanTrue or False
A integer number (equivalent to int32)-1, 5, 9521
A floating-point number0, 3,45, -0.1
A character container, useful to mute (edit) at runtime."", "Hello","Hello World!"
Same as a String, but not meant to be mutable. Mostly used for the localization system.English: Hello, French: "Bonjour"
A engine struct (x,y,z), mostly used for locations or directions.(0,0,0), (3,-5,1)
A engine struct (x,y,z), used for rotations.(0,0,0), (3,-5,1)
A engine struct, contains a Vector (for location), Rotator (for rotation) and a Vector (for scale).((100,50,0),(0,-90,0),(1,1,1))
A reference to an instance of a object.Null, Light, Actor, Camera

Reading and writing ( Get/Set)

When you use a variable, you either read its value (Get), or you write a new value (Set).
You can Get or Set a variable by typing Get My Variable Name or Set My Variable Name (You need to have the correct context to make it appear).

To place a Get node of your variable from the My Blueprint tab, hold Ctrl while dragging then release. To place a Set node hold Alt while dragging then release.

Variable color

Depending on the variable type, the pin and line color will be different.

More

You can find here more details about blueprint variables.

Events, Functions, Macros & Event Dispatchers

Sometimes you need a piece of code in multiple places. Instead of duplicating it, the best is to transform it into a event, function or macro. But what is the difference ?

Mainly:

  • Events are used for thing that don’t return anything and that can execute in parallel.
  • Functions are used if you need output values.
  • Macros are used if you need to use time nodes or if you want multiple exec output pins.
Type
Exec inputs
Variables inputs
Exec outputs
Variables outputs
Access
Other
EventOneOne or multipleNoneNoneCan be called from anywhere if public.The execution flow doesn’t wait for the “end” of the event, it calls the event then continues.
FunctionOneOne or multipleOneOne or multipleCan be called from anywhere if public.Cannot contain any time nodes (Delay, Cooldown, …).
Can be overridden in parent classes if public.
MacroOne or multipleOne or multipleOne or multipleOne or multipleCan only be called inside the class.

For event dispatchers, it’s a bit special, in blueprints it’s called Event Dispatchers but it’s known in programming as delegates. See a delegate like a special event that you can “call” (known as broadcast) and “bind to” (known as subscribe). It’s very useful if you want to send an event to anyone interested in it. Delegates are instance dependent (you subscribe to a delegate of a object instance), they can have multiple inputs and can’t return anything.

For example, you would use a delegate when the player’s health changes to update your Widget (meaning the Widget is bound to your player instance).

Context Menu

The context menu is what is shown when your right click in a BP graph.

Filter
Depending on where you right click (and what you were dragging), the options are different, because UE filters out any actions for you that are “unrelated/don’t make sense”.

Keywords
UE saves you time, you don’t need to type the full name of each node to get it. Just type in keywords.

Example with basic math operations

If you want to do a mathematical operation, you can type the symbol directly.

This works with Add (+), Substract (-), Multiply (*), Divide (/) and more !

Organizing nodes

There is different ways to keep your code organized.
The most known one is comments ! In UE you can comment individual nodes, or comment inside a group.

Individual node comment
Hover your node then click on the little bubble to show it (and do the same if you want to hide it).

Group comment
You can make a group by pressing the group key (C key by default), if you want to make a group around already placed nodes, drag an area with your mouse then press the group key.

Reroute nodes
Sometimes you will have lines that will overlap each other or with nodes. With a double click on the line you can create a Reroute Node.
This is possible with execution and variables lines. Once created you can move reroute nodes wherever you want.

Categories
In order to better organize your variables, functions and macros, you can create categories and an infinite number of subcategories.

Info

Categories are also displayed in the context menu.

Debugging

Once you finished coding something, you will test it, and if it goes wrong (or if you want to be sure everything works as planned) you will debug your code.
Debugging is the process of identifying and removing errors or unwanted behaviors. Blueprint debugging features are disabled in packaged builds.

Print
The most common way to debug is to Print something. In UE, you can use the Print String or Print Text nodes.
Print Text is recommended if you want to print runtime values (from variables for example)

Print to Screen & Print to Log

  • Screen: Will show on the top left of your PIE window.
  • Log: Will show in the Output Log.

Breakpoints

From UE Docs

“Blueprint debugging is a powerful feature that provides the functionality to pause the execution of a game during Play In Editor (PIE) […]. When debugging, you can step through any graph of a Blueprint or Level Blueprint through the use of Breakpoints.”

Warning

  • Breakpoints placed on event nodes won’t be triggered.
  • You can only place breakpoints on impure nodes.
  • Depending on your hardware, UE can crash if you keep it paused to long on one breakpoint

More

More about the breakpoint features here

Watch
The watch feature works with breakpoints, it allows you to see a value of a pin without hovering it manually.

Draw
Sometimes when you debug some code you want to visualize locations, rotations or shapes.
This is easily done with Draw Debug [...] nodes, they can be called in any context (if you have a valid world) and they have a lot of parameters.

List of debug draw nodes with example here: All Debug Draws

Miscellaneous

Blueprint

Viewport tools

Input Systems

UE has two input systems, the first one is old and should not be used if you use a engine version greater than 5.0. The second one was officially introduced in 5.1, named “Enhanced Input System”. And like the name says, it’s a lot more powerful than the previous one.

The default characters in the First Person and Third Person templates already uses the Enhanced Input system, it’s a good idea to check how it’s all setup there before doing it from scratch in your project.

More about Enhanced Input

More can be found about the Enhanced Input System in the Official Documentation

Packaging

When packaging a project you have 3 methods

  • Debug (No code optimization, good for debugging a packaged game)
  • Development (Slightly optimized, still okay to use for debugging and further testing)
  • Shipping (Optimized as much as I could (depends on editor and project settings), this is the build you will send to your players)

Packaging time

You may have noticed that Unreal Engine can take a lot of time to package a game, but since most of the packaging process is due to meshes, textures and other visual assets the packaging process will be very fast the next time you package (because UE will reused the unchanged assets).

Training exercises

So now that you read all of that, you need some practice to be sure your understood everything AND to learn even more !

If you already have some projects ideas and the listed exercises seems to boring for you, don’t hesitate to directly start to learn by doing your project.
But be careful ! Don’t overkill yourself with a very big game that will probably make you hate UE (because what you have to learn will be to big for a new UE user).
Start with something “small” or “medium”, something that you like and can be scaled up when you will have more knowledge and motivation to make a great game !

Exercises

More

More resources and tools if you want to go further.

Useful links

Tools & plugins

A list of some of tools and plugins I used a lot when working with Blueprints (mostly free).

Tools:

  • BlueprintUE: A easy way to preview and share code with a link

Fab plugins:

Recommended YouTube channels

General stuff:

Materials:

YouTube warning

Sadly, a lot of UE YouTube content about programming (and mostly for BP) shows wrong/bad ways to program or use UE features.
If you want to keep using YouTube as your main learning tool (not recommended), please try to understand why a youtuber tells you something, and don’t follow him like a sheep 🧠.

Credits

Special thanks to the incredible people in the Unreal Source Discord for their valuable feedback, which has improved the quality of this page and the accuracy of its content.