How to Make a Checkpoint & Save System in UE5 Blueprints

Unreal gives you the persistence layer for free — the SaveGame object — so a checkpoint system is really about deciding what state matters and when to capture it. Transform plus vitals at a trigger is the whole minimum viable version.

What it’s made of

Variables

A SaveGame Blueprint class holding the fields you persist (player transform, health, collected flags), a SlotName string, and checkpoint trigger actors in the level.

Events

Checkpoint trigger’s On Component Begin Overlap captures state; the death path (your health system’s OnDeath) loads it back.

The logic

Save: Create Save Game Object (its class pin already types the output — no cast needed) → set its fields from the player (Get Actor Transform, current health) → Save Game to Slot. Load: Does Save Game Exist → Load Game from Slot → Cast To your SaveGame class to read the fields → restore with Set Actor Transform and your Heal/SetHealth path. Death respawn becomes "load last checkpoint" instead of bespoke respawn logic.

Key nodes you’ll wire

Create Save Game ObjectCast To (your SaveGame)Save Game to SlotDoes Save Game ExistLoad Game from SlotOn Component Begin OverlapGet/Set Actor Transform

The mistake that breaks it

Saving references to live actors. SaveGame persists data, not objects — store transforms, IDs and values, then reconstruct state on load.

New to how Blueprint systems fit together? Read the anatomy of a Blueprint system first.

Or skip the wiring — generate it

BlueprintStudio builds this system from a plain-language prompt — the right nodes, exec and data pins wired, defaults set — and tells you whether it is ready to paste or what to set up first. The prompt is prefilled:

Build “Checkpoint & Save System” in BlueprintStudio

Prompt variations to try

Paste it into your Blueprint, or apply it with the free Cosindra desktop app (Windows & macOS).

Common questions

Why do I need Cast To after Load Game from Slot but not after Create Save Game Object?

Create Save Game Object has a class pin, so its output is already typed as your subclass — the fields are right there. Load Game from Slot only knows it loaded some SaveGame, so it returns the base class; Cast To your SaveGame Blueprint is what exposes your transform and health fields. The cast is safe here — you know exactly what the slot contains.

Can a SaveGame store references to actors?

No — an actor reference is a pointer to a live object that won’t exist next session, so it loads as invalid. Persist data that reconstructs the state instead: transforms, floats, and stable string IDs. On load, resolve IDs back to actors by matching a name or tag, respawn anything missing with SpawnActor, and check IsValid before touching any of it.

How do I make collected pickups stay collected after a reload?

Give every pickup a stable ID — an editable Name variable set per instance works — and append it to a CollectedIDs array in the SaveGame at pickup time. On Event BeginPlay, each pickup asks the loaded save whether Contains finds its ID and destroys itself if so. The level Blueprint never tracks anything; pickups clean themselves up.

More systems