I want to...¶
Start with the thing you are trying to build. The links below put the existing pages in a useful order, so you do not have to know the API tree before you know the engine.
I want to make a health bar¶
Read in this order:
- Create Widget + Add to Viewport
- create the HUD widget once, give it the right owning player, store the reference, and put it on screen.
- Updating a Widget: Bindings vs Events
- update the bar when health changes instead of polling from a binding every frame.
- Buttons, Progress Bars, and basic UMG events
- feed progress bars
0.0to1.0, update text deliberately, and keep UI events from searching the world. - Clamp / Map Range Clamped / Normalize To Range
- keep health legal, convert it to a bounded
0..1ratio, and guard a zero maximum instead of hiding invalid range data. - Actor Components as reusable gameplay
- put shared health state and
OnHealthChangedbehavior in one reusable component instead of copying variables into every character/enemy/prop. - HealthComponent and damage response pattern
- keep health math, clamping, death gates, UI broadcasts, and replication hooks in one reusable owner.
- Nameplates, floating health bars, and damage numbers
- put health bars over enemies, read PlayerState names/teams, and keep floating UI from owning the health value.
- HUD state from replicated and local data
- rebind the local HUD after respawn and combine pawn, PlayerState, and GameState values without replicating widgets.
- Event Dispatchers - put
OnHealthChangedon the character or health component, then bind the widget to it. - Cast, Interface, or Dispatcher? - understand why the character broadcasts and the widget listens.
- Event AnyDamage / Apply Damage
- receive damage and change the health value that drives the UI.
- Blueprint variables and references, Is Valid, and Accessed None - debug empty character or widget references.
Usual shape:
PlayerController BeginPlay
-> Create Widget WBP_HealthBar
-> Bind widget to HealthComponent.OnHealthChanged
-> Initial UpdateHealth
-> Add to Viewport
Character takes damage
-> HealthComponent clamps Health
-> HealthComponent calls OnHealthChanged(Health, MaxHealth)
I want buttons, menus, or UI bars to work correctly¶
Read in this order:
- Create Widget + Add to Viewport
- create the widget once, give it the right owning player, and store the reference.
- Buttons, Progress Bars, and basic UMG events
- use OnClicked/OnPressed/OnReleased deliberately, feed progress bars normalized values, and update text without fighting bindings.
- Set Text, Format Text, and Text vs String vs Name
- update labels from one owner, preserve typed/localizable placeholders, and choose Text instead of display-facing String or Name conversions.
- Set Visibility: Hidden, Collapsed, and hit testing
- choose whether a panel paints, keeps layout space, or lets itself and its children receive pointer input.
- Updating a Widget: Bindings vs Events
- push gameplay changes into widgets instead of polling or searching from UI bindings.
- Remove from Parent and widget lifetime
- close widgets without confusing removal, destruction, stored references, Construct/Destruct, or dispatcher cleanup.
- Set Input Mode & Show Mouse Cursor
- pair interactive menus with input focus, cursor state, pause, and restore logic.
- Enable Input / Disable Input / Set Ignore Move and Look Input
- decide whether the menu should only change focus or also lock movement and camera look.
- Set Game Paused - stop and resume the game world separately from showing the widget, routing input, or focusing UI.
- Event Dispatchers
- let buttons request actions from their owner and let gameplay broadcast UI updates.
- Widget Component and World-Space Widgets
- choose actor-attached UI when the widget should live in the world instead of the player's viewport.
- Widget Interaction Component
- use a virtual pointer when a player needs to hover or click world-space Widget Components.
Usual shape:
PlayerController opens menu
-> Create/store WBP_Menu
-> bind menu dispatchers to controller functions
-> Add to Viewport
-> Set Game Paused true if this is a pause menu
-> UI Only + cursor true
ResumeButton OnClicked
-> menu calls ResumeRequested
-> controller removes widget
-> Set Game Paused false
-> Game Only + cursor false
I want a crosshair, prompt, nameplate, or floating damage number¶
Read in this order:
- Create Widget + Add to Viewport
- create local reticle and prompt widgets once and update the stored instance.
- Crosshair, reticle, and interaction prompts
- split fixed screen UI, camera/cursor traces, prompt data contracts, priority, input-device text, and server interaction requests.
- Line Trace By Channel
- find the world target the prompt or reticle is describing.
- Blueprint Interfaces
- let doors, pickups, terminals, and NPCs answer the same prompt/interact questions without a cast chain.
- Widget Component and World-Space Widgets
- attach labels, bars, and panels to actors when the UI belongs in the world.
- Widget Interaction Component
- click and hover actual world-space UMG panels.
- Nameplates, floating health bars, and damage numbers
- read HealthComponent, PlayerState, and GameState values, face/hide labels, and pool transient hit numbers.
- Project World Location to Widget Position and off-screen markers
- project through the owning player's camera, keep DPI/player viewport coordinates consistent, and add pivot-safe clamping and occlusion policy.
- HUD state from replicated and local data
- combine local prompts, pawn state, PlayerState, GameState, and RepNotify in one local HUD.
Usual shape:
PlayerController creates WBP_HUD once
-> local interaction trace finds an interactable target
-> target returns prompt data through an interface
-> HUD updates the reticle/prompt
-> Interact input sends a server request when gameplay state should change
-> replicated state refreshes local bars/nameplates/HUD rows
I want to reuse health, inventory, team, or interaction logic¶
Read in this order:
- Blueprint variables and references
- understand value variables, object references, class references, and why a typed variable still needs assignment.
- Arrays, Sets, Maps, and ForEach
- choose lists, unique membership, or key-value lookup for inventory, overlap, and team data.
- Structs, Enums, and Switch on Enum
- group related values and replace contradictory booleans with named states.
- Actor, Scene, and Primitive Components
- learn which parts have transforms, collision, rendering, or just behavior.
- Actor Components as reusable gameplay
- move shared health/inventory/team/interaction state into a component with clear owner and widget communication.
- HealthComponent and damage response pattern
- make the health component own clamping and broadcasts while each actor decides what death means.
- Status effects and damage-over-time with timers
- keep poison, burn, slow, stun, and timed buffs in one receiver-side owner with explicit stack, refresh, and cleanup rules.
- Small Inventory Architecture
- split item definitions, world pickups, inventory entries, equipped actors, UI, and SaveGame data.
- Add, Remove, Stack, and Broadcast Inventory Changes
- make inventory mutation explicit and notify widgets from one owner.
- UMG Inventory Slots, ListView/TileView, and Drag/Drop
- display inventory state without making slot widgets the authority.
- Add Component by Class / Child Actor Component
- decide when a component should be designed into the Blueprint or added at runtime.
- Data Tables vs Data Assets
- move repeated item/enemy/ability definitions out of copied Blueprint defaults when tuning data grows.
- Cast, Interface, or Dispatcher?
- choose how the component talks to owners, widgets, and other actors.
- Gameplay Tags, Actor Tags, and Component Tags
- classify actors/components without mistaking labels for behavior.
- Actor Has Tag / Component Has Tag / Get Components by Tag
- run the concrete plain-name tag checks on the correct actor or component storage without confusing them with Gameplay Tags.
Usual shape:
BP_Enemy / BP_Player / BP_Barrel
-> HealthComponent
-> component owns health math and OnHealthChanged
-> each actor decides what death means
-> widgets/listeners bind to the component
I want to organize inventory, enemy, ability, or tuning data¶
Read in this order:
- Blueprint variables and references
- separate values, object references, class references, and asset references before choosing a data shape.
- Get Class / Class Is Child Of / Is Valid Class
- distinguish a live object from its class and validate class-driven spawning/default access without treating validity as spawnability.
- Arrays, Sets, Maps, and ForEach
- decide whether the data is an ordered list, unique membership, or key-value lookup.
- Structs, Enums, and Switch on Enum
- bundle related item/enemy fields and model modes with named enum values.
- Data Tables vs Data Assets
- choose table rows for spreadsheet-like lists or data assets for authored per-item/per-ability definitions.
- Get Data Table Row / Row Found / Row Not Found
- resolve one typed row, handle missing keys, and keep invalid table/schema setup separate from normal lookup failure.
- Data Table row names, row handles, and stable IDs
- choose durable row identity, SaveGame values, and explicit rename migrations without using display text as a key.
- Soft Object/Class References and async loading
- defer heavy asset/class loading, validate completion, retain results, and account for cooked content.
- Small Inventory Architecture
- decide which item data is a definition, pickup, runtime entry, equipped actor, UI view, or SaveGame value.
- Add, Remove, Stack, and Broadcast Inventory Changes
- model stack updates, duplicate IDs, full inventory, and refresh events.
- UMG Inventory Slots, ListView/TileView, and Drag/Drop
- decide whether the visible inventory should be manual slots, a ScrollBox, or a virtualized ListView/TileView.
- Game Instance and Save Game: Create / Save / Load Game to Slot
- decide which runtime values survive level travel or quitting.
- Updating a Widget: Bindings vs Events
- push inventory/shop data into UI without hiding world searches in bindings.
Usual shape:
ItemId from pickup
-> Get Data Table Row DT_Items
-> add FInventoryItem struct to Inventory array/map
-> broadcast InventoryChanged
-> widget refreshes visible slots
I want to open a door when the player overlaps it¶
Read in this order:
- Collision presets, channels, and responses
- make sure the trigger and player can overlap in the first place.
- On Component Begin / End Overlap
- use the event pins and filter
Other Actor. - Get Overlapping Actors / Components / Is Overlapping Actor
- re-check current occupancy after pair-based End Overlap events and choose an array or set when several actors can hold the door open.
- Blueprint variables and references
- assign the placed door reference instead of expecting a
BP_Doorvariable type to find one. - Structs, Enums, and Switch on Enum
- model
Closed,Opening,Open, andClosingas one enum instead of several booleans. - Actor, Scene, and Primitive Components
- understand the trigger component, door mesh, and root transform.
- Cast To X or Blueprint Interfaces
- choose whether the trigger needs this exact player class or any interactable actor.
- Delay, DoOnce, Gate, Sequence, and latent flow
- avoid using DoOnce or Gate to hide a missing door-state reset.
- Breakpoints and watch values
- prove the overlap fired and inspect the actor reference.
- Timelines / Add Timeline / Play / Reverse / Finished
- play and reverse the authored door motion and handle Finished deliberately.
- Lerp, FInterp To, and moving things smoothly
- understand the alpha/math that the Timeline usually drives.
Usual shape:
DoorTrigger BeginOverlap
-> Other Actor
-> Cast/Interface filter
-> Play door-opening Timeline or call OpenDoor
I want to interact with the thing I am looking at¶
Read in this order:
- Line Trace By Channel - shoot the query from the camera or player view and get the hit actor.
- Line Trace For Objects / Multi Line Trace For Objects
- use selected object categories when that is the real filter, and account for walls whose unselected object type will not occlude the query.
- Break Hit Result
- read the exact actor, component, contact point, normal, and trace distance only after the trace reports a valid hit.
- Collision presets, channels, and responses
- choose which objects the trace can hit.
- Blueprint Interfaces
- send one
Interactmessage to the hit actor instead of casting through a list of possible classes. - Cast, Interface, or Dispatcher? - confirm that this is a one-target contract, not a dispatcher.
- Print String and the Output Log and Breakpoints and watch values
- prove what the trace hit.
Usual shape:
Input Interact
-> Line Trace By Channel
-> Branch Return Value
-> Hit Actor
-> Interface Message: Interact
I want to pick up an item¶
Read in this order:
- On Component Begin / End Overlap or Line Trace By Channel - decide whether pickup happens by touching the item or looking at it.
- Blueprint Interfaces
- make pickups, doors, and switches answer the same
Interactcall. - Blueprint variables and references
- store
HeldItem,CurrentPickup, or item data deliberately. - Arrays, Sets, Maps, and ForEach
- keep inventory slots, overlapping pickups, or item counts in the right container.
- Structs, Enums, and Switch on Enum
- bundle item fields into one inventory entry instead of parallel loose variables.
- Data Tables vs Data Assets
- move item definitions and tuning values out of pickup actor defaults.
- Small Inventory Architecture
- separate the world pickup from the inventory entry it creates.
- Add, Remove, Stack, and Broadcast Inventory Changes
- make AddItem report accepted/rejected counts before the pickup destroys or hides itself.
- Equip, Use, and Drop Item Flow
- decide when the item stays as data, becomes equipped, is consumed, or returns to the world as a pickup.
- UMG Inventory Slots, ListView/TileView, and Drag/Drop
- show slots and drag/drop item requests without letting UI mutate the bag.
- Attach Actor To Component
- attach held items to a hand socket or component.
- Ownership and lifetime - understand why a held item reference can go stale if the item is destroyed or replaced.
- Destroy Actor / Set Life Span
- remove consumed pickups or temporary spawned items cleanly.
- Is Valid - guard optional held-item references.
Usual shape:
Interact target receives Interact
-> validate player inventory reference
-> AddItem(ItemId, Quantity)
-> Branch AcceptedCount > 0
-> destroy/hide/reduce pickup
-> InventoryComponent broadcasts OnInventoryChanged
-> optional EquipItem later spawns and attaches held actor
I want to hide, show, disable, or remove something¶
Read in this order:
- Set Actor Hidden In Game / Set Visibility
- decide whether you only mean visual hiding, one component's visibility, or whole-actor hiding.
- Collision presets, channels, and responses
- understand which collision settings decide blocking, overlap, and traces.
- Set Collision Enabled / Response / Profile Name
- disable or change collision when invisible objects should stop blocking or overlapping.
- Destroy Actor / Set Life Span
- remove actors for real, or schedule their cleanup after a delay.
- Create Widget + Add to Viewport and Remove from Parent and widget lifetime
- remember that widgets are viewport objects, not actors, and removing a widget is not the same as destroying an actor.
- Blueprint variables and references
- clear or rebuild references when hidden/removed/destroyed objects change.
Usual shape:
Pickup collected but will respawn
-> hide actor visuals
-> disable collision
-> set respawn timer
Temporary impact actor
-> Set Life Span 8.0
Menu closed
-> remove/hide widget
-> restore input mode
I want a cooldown, poison tick, delayed respawn, or one-time trigger¶
Read in this order:
- The frame: Tick, timers, and timelines
- understand when work runs every frame, later, repeatedly, or along an authored curve.
- Set Timer by Event / Clear Timer by Handle
- schedule callbacks, store timer handles, clear looping timers, and avoid treating timers like threads.
- Status effects and damage-over-time with timers
- make poison, burn, slow, stun, and timed buffs start, stack, refresh, tick, expire, and clean up in one owner.
- Timelines / Add Timeline / Play / Reverse / Finished
- use authored curve playback for doors, fades, charge bars, and reversible motion instead of callback timing.
- Delay, DoOnce, Gate, Sequence, and latent flow
- use one-off waits and flow gates without hiding missing reset/state bugs.
- Structs, Enums, and Switch on Enum
- model cooldown-ready, poisoned, dead, respawning, or door states as named values when the state matters.
- Breakpoints and watch values
- prove the set, clear, reset, and callback paths ran on the same instance.
Usual shape:
StartPoison
-> Set Timer by Event ApplyPoisonTick looping every 1.0
-> store PoisonTimerHandle
StopPoison
-> Clear and Invalidate Timer by Handle
ApplyPoisonTick
-> Apply Damage
I want to make a pause menu or inventory¶
Read in this order:
- Create Widget + Add to Viewport
- create and store the menu widget.
- Buttons, Progress Bars, and basic UMG events
- wire Resume, Equip, Drop, and slot buttons to widget/controller functions.
- Set Input Mode & Show Mouse Cursor
- route input to the UI, show the cursor, and restore game input on close.
- Enable Input / Disable Input / Set Ignore Move and Look Input
- lock movement/look separately from UI focus, and avoid stacked ignore calls that never unlock.
- Set Game Paused - pause or unpause the game world and branch on the return value instead of assuming the menu state and paused state match.
- Remove from Parent and widget lifetime
- close the menu without losing track of the widget instance, input restore, or dispatcher bindings.
- Add Mapping Context - add a temporary menu context if your Enhanced Input setup uses menu-specific controls, then remove it on close.
- Input Action Event and Enhanced Input Action Values
- bind the pause/menu action, allow it while paused when intended, and keep local input separate from authoritative gameplay requests.
showdebug enhancedinputand Input Debugging- prove whether the menu context and action work before changing widget focus, pause, or the receiving Blueprint instance.
- Arrays, Sets, Maps, and ForEach, Structs, Enums, and Switch on Enum, and Data Tables vs Data Assets
- model inventory slots, item entries, and item definitions before drawing them.
- Small Inventory Architecture, Add, Remove, Stack, and Broadcast Inventory Changes, and Equip, Use, and Drop Item Flow
- keep UI buttons talking to one inventory owner instead of mutating slots directly.
- UMG Inventory Slots, ListView/TileView, and Drag/Drop
- choose manual slots, ScrollBox, ListView, or TileView before wiring drag/drop.
- The Blueprint survival kit - keep open, close, and toggle logic out of one giant event graph.
- Updating a Widget: Bindings vs Events
- push data into inventory/HUD widgets instead of hiding gameplay work in bindings.
- Accessed None - debug missing menu references.
Usual shape:
Input Pause
-> if menu closed: create/show widget, add menu context if needed, pause, UI Only, cursor true
-> if menu open: remove/hide widget, remove menu context, unpause, Game Only, cursor false
I want to play a sound or loop ambience¶
Read in this order:
- Play Sound 2D / Play Sound at Location / Spawn Sound Attached
- choose local UI sound, one-shot world sound, or an attached audio component you can stop later.
- Sound Cue vs MetaSound vs Sound Wave
- choose a raw clip, simple variation graph, or procedural/parameter-heavy sound source before overbuilding the asset.
- Sound Attenuation and spatialized audio
- make world sounds fall off with distance, pan/spatialize, and use the local listener correctly.
- Audio Component controls: Play, Stop, Fade, Volume, and Sound
- keep a live sound reference when a loop needs Stop, Fade Out, Set Sound, or volume changes.
- Physical Materials for surface-specific feedback
- choose footstep or impact sounds from the surface a trace/hit found.
- Actor, Scene, and Primitive Components
- understand why audio can live as a component on an actor.
- Add Component by Class / Child Actor Component
- add optional runtime audio components when the actor does not always need the sound source.
- Attach Actor To Component
- understand sockets, components, and relative transforms when a sound follows a hand, weapon, engine, or torch.
- Spawn Niagara System at Location / Attached
- pair sound with local VFX for impacts, loops, muzzle flashes, or surface puffs.
- Open Level and Level streaming basics - decide whether travel destroys the old world or the persistent world keeps running.
- Replication basics - in multiplayer, replicate the gameplay state that should cause clients to play local audio.
Usual shape:
Short UI click
-> Play Sound 2D
Explosion at a point
-> Play Sound at Location
-> attenuation asset controls distance/spatialization
Looping engine hum
-> Spawn Sound Attached
-> store AudioComponent
-> Fade Out or Stop when engine turns off
I want impact sparks, bullet holes, footsteps, or surface-specific feedback¶
Read in this order:
- Line Trace By Channel or Event Hit
- get the hit result that contains Impact Point, Impact Normal, hit actor, hit component, and optionally Physical Material.
- Break Hit Result
- distinguish Location from Impact Point, read the actor/component safely, and request a physical material from the producing query when needed.
- Physical Materials for surface-specific feedback
- understand why the physical material can be empty, and how surface types choose sounds, decals, and effects.
- Spawn Niagara System at Location / Attached
- spawn impact bursts at a world point or attach loops/trails to a component you will control later.
- Spawn Decal at Location and impact feedback
- place projected marks using Impact Point and Impact Normal with a cleanup lifespan.
- Play Sound 2D / Play Sound at Location / Spawn Sound Attached
- add the audio half of the same feedback event.
- Material Instances and Dynamic Material Instances
- flash or dissolve the mesh that was hit when changing the surface itself is the better feedback.
- Replication basics
- replicate the gameplay result or impact event, then let each machine spawn its local presentation.
Usual shape:
Trace or hit event
-> Break Hit Result
-> Surface Type from Physical Material
-> choose sound/VFX/decal data
-> Spawn Niagara at Impact Point
-> Spawn Decal at Impact Point aligned to Impact Normal
-> Play Sound at Location
-> Apply Damage separately if gameplay requires it
I want to make a weapon or projectile hit something¶
Read in this order:
- Line Trace vs projectile vs overlap weapon hits
- choose hitscan, projectile travel, overlap hitboxes, blocking hits, or thick/multi traces by the behavior the weapon needs.
- First weapon fire pattern and impact cleanup
- place input, cooldown, ammo checks, muzzle transforms, hit detection, damage, feedback, cleanup, and multiplayer authority in the right owner.
- Projectile Movement Component and first projectile actor
- build a spawned projectile with a root collision component, initial speed/velocity, local direction, gravity, bounce, homing, and cleanup.
- Sphere Trace, Capsule Trace, and Multi Trace basics
- give melee, shotgun, and interaction traces thickness or multiple returned hits without damaging the same actor several times.
- Line Trace By Channel - build precise camera or muzzle traces and read the hit result.
- Spawn Actor from Class - create projectile actors and set instigator/owner deliberately.
- Get Forward Vector & Find Look at Rotation
- make muzzle transforms, aim directions, and local X+ projectile travel agree.
- Collision presets, channels, and responses, Event Hit, and On Component Begin / End Overlap
- decide what blocks, overlaps, ignores, and reports the impact.
- Event AnyDamage / Apply Damage
- send simple generic damage after the hit is valid.
- Apply Point Damage / Apply Radial Damage / Damage Type
- use point damage for exact impact data, radial damage for explosions, and damage types for category-specific receiver behavior.
- Spawn Niagara System at Location / Attached, Spawn Decal at Location and impact feedback, Play Sound 2D / Play Sound at Location / Spawn Sound Attached, and Physical Materials for surface-specific feedback
- play local impact feedback from the hit point, normal, and surface.
- Replication basics - keep the server in charge of trusted weapon hits and replicated projectile actors.
Usual shape:
Input Fire
-> choose hit model
-> check cooldown/ammo
-> line trace or spawn projectile from muzzle
-> filter hit actor / component / owner / already-hit set
-> apply damage if appropriate
-> spawn local impact feedback
-> destroy or expire temporary projectile/hit state
I want to track score, objectives, waves, or win/loss¶
Read in this order:
- GameMode & friends, single-player edition
- understand the framework owner that decides start, respawn, score, and win/loss rules.
- Get Game Mode / Game State / Player State
- read the active framework objects without confusing server-only GameMode with client-readable GameState or replicated PlayerState.
- Score, objectives, and win/loss state
- place score, match phase, objective progress, end screens, SaveGame results, and multiplayer-readable state in the right owner.
- Objective and Wave Manager Actors
- coordinate generators, levers, waves, checkpoints, spawners, doors, and reset/save rules without hiding everything in Level Blueprint or GameMode.
- Get All Actors with Interface / Get All Actors with Tag
- discover placed objective participants or tagged checkpoints once, then keep a manager-owned registry instead of scanning every frame.
- GameState and PlayerState in practice
- keep public match state in GameState and public per-player score/team state in PlayerState.
- HUD state from replicated and local data
- make HUDs, scoreboards, objective text, and end screens read gameplay state instead of owning it.
- Death and defeat cleanup flow
- award score and objective credit once from a guarded death transition.
- Event Dispatchers
- let generators, enemies, doors, and checkpoints notify a manager when their local state changes.
- Save Game: Create / Save / Load Game to Slot
- save completed objective IDs, best scores, stars, and durable results as plain values.
- Does Save Game Exist / Delete Game in Slot / Async Save Game to Slot
- check profile slots, delete/reset progress, and save asynchronously from results menus without overlapping requests.
- Replication basics, Blueprint Custom Events as RPCs, and RepNotify variables and local presentation
- keep score/objective authority on the server and update client UI from replicated state.
Usual shape:
Enemy dies or generator completes on the server
-> actor broadcasts local event once
-> objective/wave manager updates local progress
-> GameMode validates score or win/loss rules
-> GameState / PlayerState stores public state
-> local HUD reads replicated state and shows score/objective/end screen
-> SaveGame records durable results only at deliberate save points
I want my project to spawn the right character¶
Read in this order:
- GameMode & friends, single-player edition
- set the active GameMode, Default Pawn Class, PlayerController Class, HUD Class, and understand why a map override can beat project settings.
- Level Blueprint vs Actor Blueprint vs Manager Actors
- keep spawn/setup rules in the framework owner instead of hiding reusable gameplay in a one-map script.
- Player Start, Restart Player, and checkpoints
- place safe PlayerStart actors and understand who chooses the spawn point.
- Possession - make sure the PlayerController actually possesses the pawn you expect.
- Get Player Character / Pawn / Controller
- inspect the runtime references after the map starts.
- Create Local Player / Get Num Player Controllers
- add split-screen/local co-op players without confusing local player slots with online clients.
- Input Actions & Input Mapping Contexts and Add Mapping Context - confirm the local player has the controls for the spawned pawn.
Usual shape:
Project Settings or World Settings
-> active GameMode
-> Default Pawn Class = BP_PlayerCharacter
-> PlayerController Class = BP_PlayerController
-> Play
-> PlayerController possesses spawned pawn
I want my character to move and face the right way¶
Read in this order:
- Input Actions & Input Mapping Contexts
- understand why UE5 movement is usually one
IA_MoveAxis2D action instead of four separate key events. - Add Mapping Context - make sure the local player actually has the gameplay mapping context active.
- Input Action Event and Enhanced Input Action Values
- bind
IA_Move, choose the correct trigger event, and read its Axis2D value on the owning local player. - Enhanced Input Modifiers: Negate, Swizzle, Scalar, and Dead Zone
- build signed WASD axes and tune gamepad drift without changing the shared action's meaning.
- Add Movement Input - send camera-relative or actor-relative movement requests to the pawn.
- Get Forward Vector & Find Look at Rotation
- choose actor forward vs control/camera forward and flatten pitch for ground movement.
- Character Movement Component: the knobs that matter
- tune speed, acceleration, braking, jumping, air control, and movement mode.
- Why won't my character face where it's moving?
- choose whether the body faces movement, camera/aim, or tank-style actor forward.
- Spring Arm + Camera - set the follow-camera boom distance, collision pull-in, and control-rotation behavior.
- Jump & Launch Character - add normal jumping, double-jump tuning, launch pads, or knockback.
- Possession - make sure the pawn you are watching is actually controlled by the player or AI.
- Set Input Mode & Show Mouse Cursor
- debug menu states that stop gameplay movement input from firing.
- Enable Input / Disable Input / Set Ignore Move and Look Input
- distinguish UI focus, actor input, and controller movement/look gates.
showdebug enhancedinputand Input Debugging- inspect contexts, priorities, action values, trigger state, possession, UI focus, and the exact PIE client before rewriting movement logic.
- Get Velocity - read the motion result that animation and movement debugging usually care about.
- Root Motion vs Character Movement
- decide when animation should drive a short authored movement action instead of normal input/AI movement.
- Aim Offsets and look/aim variables
- keep aim pose variables aligned with camera/control rotation and weapon trace direction.
- Breakpoints and watch values
- inspect the input value, direction vector, and character rotation without guessing.
Usual shape:
IA_Move Triggered
-> get 2D action value
-> get control yaw or actor forward/right
-> Add Movement Input
-> Character Movement consumes input
-> rotation settings decide body facing
-> Spring Arm decides camera position
I want to push a prop or knock back a character¶
Read in this order:
- Add Impulse / Add Force - use impulses for one-time shoves, forces for continuous pushes, and confirm the target component is simulating physics.
- Jump & Launch Character - use Character Movement for launch pads and knockback on normal Characters.
- Get Forward Vector & Find Look at Rotation
- build the shove direction from actor, component, or camera/control forward.
- Attach Actor To Component
- debug held items that fall off when Simulate Physics is enabled.
- Replication basics - make the server own authoritative multiplayer shoves.
Usual shape:
Push loose crate
-> get crate Static Mesh Component
-> Add Impulse(Direction * Strength)
Knock back Character
-> Launch Character(KnockbackDirection * Strength + UpVector * Pop)
I want to switch cameras or play a cutscene shot¶
Read in this order:
- Spring Arm + Camera - know what your normal gameplay camera rig is before switching away from it.
- Set View Target with Blend
- blend the PlayerController's view to a CameraActor, death camera, inspect camera, or back to the possessed pawn.
- PlayerCameraManager and Camera Shake
- add local recoil, impact, landing, or explosion shake without changing possession or view target.
- Possession - understand why changing the view does not change which pawn receives input.
- Possess / Un Possess / Get Controller
- use possession only when control should move to another pawn.
- Get Player Character / Pawn / Controller
- get the controller or current pawn reference you need for the switch.
- Set Input Mode & Show Mouse Cursor
- pair camera-only views with UI/focus changes when the player should stop driving gameplay.
Usual shape:
Start cutscene or death camera
-> Get Player Controller
-> Set View Target with Blend to CameraActor
-> optionally Start Camera Shake on the local PlayerCameraManager
-> optionally ignore input or set UI input mode
Return to gameplay
-> Set View Target with Blend to controlled pawn
-> restore input/cursor state
I want my Animation Blueprint to know how fast the character is moving¶
Read in this order:
- Try Get Pawn Owner - get the pawn whose mesh this Animation Blueprint is animating.
- Cast To X - turn the broad
Pawnreference into your character class when that is truly what the AnimBP is built for. - Event Blueprint Update Animation
- gather animation data on the normal game-thread update.
- Animation threading and Property Access
- move stable repeated reads into Property Access/thread-safe animation functions after the normal owner/data path is proven.
- Get Velocity - read actor
velocity and turn it into ground speed with
Vector Length XY. - Vector Length / Vector Length XY / Normalize
- turn velocity into 3D or ground speed and keep zero-direction handling separate from magnitude.
- Blend Spaces in Animation Blueprints
- feed
GroundSpeedinto a 1D/2D Blend Space for idle/walk/run poses. - Animation State Machines and transition rules
- use the variable in transition rules and debug preview-vs-runtime differences.
- Possession - understand why the editor preview is not your live possessed pawn.
Usual shape:
Initialize Animation
-> Try Get Pawn Owner
-> Cast To BP_YourCharacter
-> store OwnerCharacter
Update Animation
-> Is Valid OwnerCharacter
-> Get Velocity
-> Vector Length XY
-> set GroundSpeed
-> Blend Space / transition rule reads GroundSpeed
I want attacks, reloads, footsteps, or hit windows in animation¶
Read in this order:
- Animation State Machines and transition rules
- keep locomotion modes and transition variables clear before adding action layers.
- Blend Spaces in Animation Blueprints
- understand the locomotion pose the action will often layer over.
- Animation Montages / Play Montage
- play one-shot attacks, reloads, emotes, and sectioned actions through the correct mesh and slot.
- Cached poses and Layered Blend Per Bone
- reuse locomotion once and layer upper-body action poses over the right bone chain.
- Montage slots layered over locomotion
- make sure montage slots actually reach the final pose and decide whether the action is full-body or upper-body.
- Animation Notifies and Notify States
- time footsteps, particles, sounds, combo windows, and melee hit windows from the animation itself.
- Root Motion vs Character Movement
- decide whether an authored attack/vault/lunge should move the capsule or remain normal Character Movement.
- Aim Offsets and look/aim variables
- align aim yaw/pitch, additive upper-body pose, and weapon trace direction.
- Play Sound 2D / Play Sound at Location / Spawn Sound Attached and Line Trace By Channel - drive the common sound/trace work a notify triggers.
- Spawn Niagara System at Location / Attached, Spawn Decal at Location and impact feedback, and Physical Materials for surface-specific feedback
- add particles, marks, footsteps, and surface-specific impact feedback.
- Replication basics - keep damage and authoritative gameplay results on the server in multiplayer.
Usual shape:
Input Attack
-> Play Montage AttackMontage on Mesh
-> montage Slot appears in AnimGraph
-> cached locomotion feeds upper-body layered blend
-> Notify State MeleeWindow begins
-> weapon trace/damage window opens
-> Notify State ends
-> cleanup on Completed or Interrupted
I want to spawn something during play¶
Read in this order:
- World vs relative transforms - understand world locations, actor forward, and why "in front of me" is not the same as adding to world X.
- Break/Make Vector and Rotator / Transform Location / Inverse Transform Location
- convert parent-, component-, or socket-local positions into the world without treating directions like locations.
- Get Forward Vector & Find Look at Rotation
- build the spawn point from location plus forward vector times distance.
- Spawn Actor from Class - create the
actor and handle the possibility that the return value is
None. - Spawn Default Controller and Auto Possess AI
- create or verify the AIController when the spawned actor is an enemy pawn.
- Get Owner / Set Owner
- decide whether the spawned actor needs an owner for networking, owner-only visibility, or RPC permission.
- Projectile Movement Component and first projectile actor
- add movement, collision, lifetime, and impact cleanup when the spawned actor is a projectile.
- Add Component by Class / Child Actor Component
- decide whether the runtime thing is really a separate actor or just a new component on an existing actor.
- Spawn Niagara System at Location / Attached
- use a visual effect spawn when the runtime thing is feedback, not a gameplay actor.
- Construction Script vs BeginPlay
- keep runtime spawning out of Construction Script.
- Event BeginPlay / Tick / EndPlay / Set Actor Tick Enabled
- put runtime setup and cleanup in the spawned actor without hiding repeated work on Tick.
- Event Dispatchers - bind to notifications on the actor you just spawned.
- Attach Actor To Component
- attach spawned equipment or effects to a component/socket when needed.
- Get Actor Of Class / Get All Actors Of Class
- understand why repeatedly searching for the spawned actor is usually the wrong follow-up.
- Get All Actors with Interface / Get All Actors with Tag
- use setup-time discovery or manager registration instead of repeated world scans for spawned actors.
Usual shape:
Gameplay event
-> choose a world spawn transform
-> Spawn Actor from Class
-> Is Valid Return Value
-> configure returned actor
-> store or pass the reference
I want to respawn the player after death¶
Read in this order:
- HealthComponent and damage response pattern
- make health reach zero through one reusable owner and broadcast death once.
- Event AnyDamage / Apply Damage
- detect death when health reaches zero.
- Death and defeat cleanup flow
- disable input, movement, collision, AI, timers, and stale references before respawn or cleanup.
- Enable Input / Disable Input / Set Ignore Move and Look Input
- lock player movement/look on death and make the unlock path explicit.
- Set View Target with Blend
- switch to a death camera or spectator shot without confusing view with possession.
- PlayerCameraManager and Camera Shake
- play local impact/death feedback without treating camera shake as gameplay state.
- GameMode & friends, single-player edition
- use the framework's spawn/restart owner instead of burying respawn in the dying pawn.
- Player Start, Restart Player, and checkpoints
- choose the checkpoint/PlayerStart and restart the controller through GameMode.
- Set Timer by Event / Clear Timer by Handle and Delay, DoOnce, Gate, Sequence, and latent flow
- choose a clear delayed-respawn pattern and avoid hidden one-time gate bugs.
- Possession - separate the player controller from the pawn body that can be destroyed and replaced.
- Possess / Un Possess / Get Controller
- verify which controller drives the new pawn and why view target is not the same thing as possession.
- Destroy Actor / Set Life Span
- clean up the old pawn or temporary death actor intentionally.
- Spawn Actor from Class - create the new pawn or respawn actor at runtime.
- Get Player Character / Pawn / Controller
- know when player-slot getters help and when the controller reference is already the better starting point.
- Add Mapping Context - debug Enhanced Input mappings that were added to the old pawn, wrong local player, or a temporary death/menu mode.
- Create Widget + Add to Viewport
- keep player UI on the controller/HUD path so it survives pawn replacement.
Character dies
-> optional death camera view target
-> GameMode chooses checkpoint / PlayerStart
-> controller stops using old pawn
-> Restart Player at Player Start
-> controller possesses new pawn
-> confirm gameplay mapping context and action bindings
-> UI rebinds to the current character
I want a value to survive changing levels¶
Read in this order:
- Game Instance - store runtime values that
should survive
Open Level, and learn why actor references are the wrong thing to carry across maps. - Blueprint variables and references
- separate plain saved values from live actor/widget/component references.
- Open Level - understand that normal map travel destroys old-world actors and starts a new map/world setup.
- Save Game: Create / Save / Load Game to Slot
- copy durable values into a SaveGame object when the data must survive quitting and launching later.
- Does Save Game Exist / Delete Game in Slot / Async Save Game to Slot
- check for slots, delete/reset profiles, and save asynchronously without racing menu clicks.
- GameMode & friends, single-player edition
- understand why GameMode and level actors are recreated with the map.
- Get Player Character / Pawn / Controller
- rebuild live references in the new map instead of reusing old actor references.
- Is Valid - guard optional references while you prove the travel handoff.
Before Open Level
-> copy plain values into BP_GameInstance
-> optionally Save Game to Slot for durable progress
-> Open Level
-> new map starts
-> Get Game Instance
-> read values
-> rebuild live actor/widget references in the new world
I want to stream an interior without changing maps¶
Read in this order:
- Level streaming basics - persistent level, streamed sublevels, Load/Unload Stream Level, and when streaming is worth the setup.
- Load Stream Level / Unload Stream Level
- use the latent load/unload nodes, visible-after-load flag, and persistent level ownership deliberately.
- Open Level - compare streaming to full map travel so you do not preserve state by accident or destroy state by accident.
- Game Instance - know which data survives full Open Level travel and which data can stay in the persistent world instead.
- On Component Begin / End Overlap
- trigger streaming from a doorway, hallway, or volume.
- Replication basics - for multiplayer, decide how clients learn which streamed state matters.
Usual shape:
Persistent-level doorway trigger
-> player enters load volume
-> Load Stream Level("L_ShopInterior", Make Visible After Load = true)
-> player exits later
-> Unload Stream Level("L_ShopInterior")
I want an enemy to see and chase the player¶
Read in this order:
- Possession - understand why the enemy pawn needs an AIController before AI movement can drive it.
- Spawn Default Controller and Auto Possess AI
- make sure placed and spawned enemies actually create their AIController.
- Possess / Un Possess / Get Controller
- prove the enemy pawn has the AIController you think it has before debugging movement.
- AI Move To & the NavMesh - set up the NavMeshBoundsVolume, AIController, Acceptance Radius, and success/fail handling.
- Get Random Reachable Point in Radius
- choose simple random patrol destinations and branch on the success Boolean before Move To.
- Seeing the player: Pawn Sensing & AI Perception
- start with
On See Pawn, then learn when AI Perception is the better system. - Behavior Trees and Blackboards for Blueprint Beginners
- move beyond one sensing event into patrol/chase/search/attack branch structure.
- Run Behavior Tree, AIController Setup, and Blackboard Keys
- start the tree from the AIController and let perception set Blackboard facts instead of directly running every behavior.
- Move To Task, Decorators, Services, and Observer Aborts
- understand why a Behavior Tree branch starts, stops, keeps moving, or immediately switches when Blackboard facts change.
- Simple Patrol, Chase, Attack, and AI Debugging
- assemble the first practical patrol/chase/search/attack loop and debug it without guessing.
- Nav Link Proxy and navigation modifier boundaries
- fix jumps, drops, doors, costly areas, and agent-fit issues in the NavMesh instead of rewriting Move To.
- EQS query basics after the first Behavior Tree
- add generators, contexts, tests, and scores when the AI needs a "best" cover/patrol/attack point instead of a random point.
- StateTree vs Behavior Tree for Blueprint beginners
- decide whether a state-machine asset is useful, or whether the working Behavior Tree should stay.
- Gameplay Debugger and AI Debugger for Blueprint Beginners
- use the apostrophe overlay to inspect NavMesh, AI, Behavior Tree, Blackboard, EQS, and Perception data on the selected actor.
- Visual Logger, EQS Debugger, and ShowDebug Boundaries
- choose recorded timelines, EQS query views, or console overlays when live prints are not the right evidence.
- Get Forward Vector & Find Look at Rotation
- face the player or reason about sight direction and yaw-only rotation.
- Dot Product, Angle, and Facing Checks
- turn normalized directions into front/behind or field-of-view tests without mistaking an angle check for range, occlusion, or perception memory.
- Line Trace By Channel - add explicit line-of-sight checks when sensing needs a precise blocker test.
- Print String and the Output Log and Breakpoints and watch values
- prove the sensing event fired, the target is valid, and the move request or Behavior Tree branch returned a useful result.
Usual shape:
Enemy has AIController and stands on green navmesh
-> simple patrol uses Get Random Reachable Point or authored patrol points
-> Pawn Sensing On See Pawn or AI Perception Successfully Sensed true
-> set Blackboard TargetActor / LastKnownLocation
-> Behavior Tree selects chase, search, attack, or patrol
-> EQS chooses scored cover/attack points only when random/authored points are not enough
-> Nav Link Proxy or modifiers fix broken nav data, not Behavior Tree logic
-> decorators and observer aborts switch branches when the Blackboard changes
-> Move To task or AI Move To uses the NavMesh
-> debug controller, blackboard, tree branch, and movement result
-> use Visual Logger or EQS debug views only when the live facts need history
or query scoring evidence
I want to add basic multiplayer¶
Read in this order:
- Multiplayer roles - learn which machines have GameMode, GameState, PlayerState, PlayerController, Pawn, UI, and GameInstance.
- Replication basics - understand Replicates, replicated variables, RepNotify, server-spawned actors, RPCs, relevancy, and why widgets do not replicate.
- Create Local Player / Get Num Player Controllers
- understand why split-screen/local-player counts are not the same as online client/player counts.
- Get Game Mode / Game State / Player State
- use GameState and PlayerState for client-readable public state instead of trying to read server-only GameMode everywhere.
- Get Owner / Set Owner
- understand the owner chain behind owned server RPCs and owner-only replication.
- Replicating Actor Components
- make HealthComponent, InventoryComponent, team, status, and interaction state replicate through a real actor/component/server path.
- Replicate Movement vs replicated variables
- separate actor/root movement from health, ammo, movement mode, and other gameplay state.
- Blueprint Custom Events as RPCs
- turn Custom Events into Run on Server, Run on Owning Client, or Multicast messages with the right ownership path and reliability choice.
- Reliable vs unreliable RPC budget
- spend Reliable on rare important messages, not Tick, held input, or state that should be replicated.
- RepNotify variables and local presentation
- update local UI, audio, materials, and VFX when replicated state arrives.
- GameState and PlayerState in practice
- keep match state in GameState and public per-player state in PlayerState.
- Actor relevancy, owner-only, and dormancy basics
- decide which clients should receive an actor, owner-only data, or a multicast before changing update rates.
- HUD state from replicated and local data
- build local HUD and scoreboard widgets from replicated pawn, PlayerState, and GameState values without trying to replicate widgets.
- Nameplates, floating health bars, and damage numbers
- display replicated public player/team/health state locally on each client.
- Has Authority / Switch Has Authority / Is Locally Controlled
- separate server authority from owning-client UI/input branches.
- Possess / Un Possess / Get Controller
- keep pawn switching and controller ownership on the authority path.
- Multiplayer PIE debugging basics
- prove which window, world, actor copy, and machine ran the graph.
- Network Emulation for beginner replication checks
- add latency and packet loss after the clean PIE client/server path works.
- GameMode & friends, single-player edition
- revisit framework ownership with the new server/client audience rules.
- Spawn Actor from Class - make runtime gameplay actors server-spawned when everyone should see them.
- Projectile Movement Component and first projectile actor
- spawn replicated gameplay projectiles from the server while keeping local muzzle feedback cosmetic.
- Get Player Character / Pawn / Controller
- avoid treating player index 0 or PlayerController as "get any player."
- Event AnyDamage / Apply Damage
- keep authoritative gameplay results on the server.
Usual shape:
Client presses Fire
-> Run on Server event on owned pawn/controller
-> server validates
-> server spawns replicated projectile
-> replicated projectile/ammo/state reaches clients
-> RepNotify/local UI/audio updates on each client
-> print net mode, authority, and local control in PIE when it fails
-> add Network Emulation after the clean remote-client path works
I want to debug red Blueprint errors¶
Read in this order:
- Accessed None - read the error as "this reference was empty here," not as a random crash.
- Print String and the Output Log
- print the values and instance names that prove your graph is running.
- Event BeginPlay / Tick / EndPlay / Set Actor Tick Enabled
- prove whether setup, per-frame work, or cleanup actually ran.
- Breakpoints and watch values
- pause the right Blueprint instance and inspect pin values.
- Is Valid - guard optional references only after you understand who was supposed to assign them.
- Get Actor Of Class / Get All Actors Of Class
- avoid "fixing" missing references by searching the whole world every time.
- Get All Actors with Interface / Get All Actors with Tag
- understand empty search arrays and tag/interface setup before using a world scan as a debug shortcut.
Usual debug loop:
Read the exact error
-> identify the empty variable/pin
-> breakpoint where it should be assigned
-> watch the value
-> fix the assignment or guard the optional path
I want to know what to read next¶
If the thing you want is not mapped above yet, use the roadmap. It is ordered by beginner value, not by engine category. The top item is the next missing page, and shipped pages leave the list.
This index grows as pages ship. For now, it links only to pages that already exist, plus the roadmap when a needed piece is still waiting its turn.