Accessed None trying to read property¶
This warning means a Blueprint tried to use an object reference that was empty at runtime. The important question is not "how do I hide the warning?" It is "why was this reference empty here?"
The one-minute version¶
Accessed None trying to read property SomeVariablemeans SomeVariable wasNoneat the moment a Blueprint tried to read from it or call through it.Noneis not zero, false, or an empty string. For object references, it means "this variable does not currently point at an object."- The Output Log message usually names the property, Blueprint, function or graph, and node. Start there; do not guess from the symptom on screen.
- It is usually a Play In Editor warning/runtime error, not a hard crash. That does not make it harmless. The logic that needed the object did not run correctly.
- Fix the source when the reference should always exist. Use
Is Valid when
Noneis an expected state you need to handle. - Animation Blueprint preview and early animation updates often run without a live possessed pawn. Guard owner variables there instead of treating every preview warning as a gameplay failure.
What the message is actually saying¶
Blueprint object variables are references. A variable named TargetDoor does
not contain a door; it contains a pointer to a door actor somewhere in the
world. Until something assigns a real actor to that variable, its value is
None.
pseudocode of the failure - not engine source
TargetDoor = None
Event Interact:
TargetDoor.OpenDoor()
// runtime warning:
// Accessed None trying to read property TargetDoor
The warning names the read that failed. In a typical Output Log entry, look for these pieces:
| Message part | What it tells you |
|---|---|
| Property | The variable or pin that was None. |
| Blueprint | The Blueprint class whose graph was running. |
| Function / Graph | The graph path, often an event graph or generated ubergraph. |
| Node | The node near the bad read. Open the Blueprint and inspect that spot. |
The property name is the most useful piece. If the message says
InventoryComponent, debug why InventoryComponent is empty. If it says
BP_ThirdPersonCharacter, debug where that character reference is supposed to
be assigned.
Why None happens¶
Most Accessed None errors are one of these:
- The variable was never assigned. You created an object reference variable, but no placed instance, overlap, spawn return value, or setup graph ever set it.
- The assignment happens later. The read runs in Construction Script, BeginPlay, Tick, a widget binding, or Animation Blueprint update before the setup node has run.
- The object was destroyed or replaced. A projectile, pickup, pawn, or UI widget was valid earlier, then got destroyed, removed, respawned, or swapped.
- A getter legitimately returned
None.Try Get Pawn Owner,Get Player Character,Get Actor Of Class, orSpawn Actor from Classcan all give you an empty result in normal situations. - You are in the wrong world or instance. Editor preview, Animation Blueprint preview, construction-time graphs, and Play In Editor instances are not all the same live gameplay object.
- The cast failed but the failed path still uses the variable. A failed cast does not magically create the target reference.
- A stored reference outlived its owner. A timer, delay, dispatcher bind, or widget can fire after the actor it remembered is gone.
The fix depends on which one is true. Adding Is Valid everywhere can hide the
warning while leaving the real setup broken.
Fixing it: source or guard¶
Use this fork:
Should this reference always exist here?
YES -> fix the assignment source.
NO -> guard it and define the "missing" behavior.
Fix the source¶
Fix the source when the variable represents required state:
BeginPlay
-> Spawn Actor from Class (BP_InventoryManager)
-> Set InventoryManager = Return Value
Later:
-> Is Valid (InventoryManager)
Is Valid: use it
Is Not Valid: print setup error / skip / recover
Common source fixes:
- assign exposed instance variables in the Details panel for each placed actor;
- store the Return Value from
Create WidgetorSpawn Actor from Class; - set the variable after a successful overlap, trace, cast, or interface call;
- move runtime lookups from Construction Script to BeginPlay when they need the play world;
- refresh cached pawn references after respawn or possession changes.
If the reference is required, a guard is still useful near the use site, but it should lead to a clear recovery or debug message. It should not silently skip core gameplay forever.
Guard an optional reference¶
Guard when None is normal:
Event Blueprint Update Animation
-> Is Valid (OwnerCharacter)
Is Valid:
Get Velocity
Set GroundSpeed
Is Not Valid:
Try Get Pawn Owner
Cast To BP_PlayerCharacter
Set OwnerCharacter
Set GroundSpeed = 0
That pattern is correct because an Animation Blueprint can be evaluated in
preview or before it has a live pawn. None is not surprising there; your graph
needs a path for it.
For a door trigger:
OnComponentBeginOverlap
-> Other Actor
-> Cast To BP_PlayerCharacter
Success:
Set CurrentPlayer = As BP_PlayerCharacter
Open Door
Failed:
do nothing
No Accessed None should happen because you only use the character reference on the success path.
The Animation Blueprint version¶
Animation Blueprints are a common first encounter with this error because they often cache a character reference:
Event Blueprint Initialize Animation
-> Try Get Pawn Owner
-> Cast To BP_PlayerCharacter
-> Set OwnerCharacter
Event Blueprint Update Animation
-> OwnerCharacter
-> Get Velocity
That second graph is unsafe if OwnerCharacter is still None. In the editor
preview, there may be no live pawn owner. During respawn or mesh swapping, the
old pawn may be gone. During startup, update can run before your mental model
expects all references to be ready.
The durable version is:
Event Blueprint Update Animation
-> Is Valid (OwnerCharacter)
Is Valid:
Get Velocity -> Vector Length XY -> Set GroundSpeed
Is Not Valid:
Try Get Pawn Owner -> Cast -> Set OwnerCharacter if success
Set GroundSpeed = 0
Do not fix this by using Get Player Character every update. That changes the
question from "which pawn owns this animation instance?" to "which player pawn
is at index 0?" Those are not the same in preview, multiple characters, or
multiplayer.
Reading the Output Log without guessing¶
When you see the warning:
- Open the Output Log.
- Find the first Accessed None line from the current Play In Editor run.
- Read the property name out loud.
- Open the named Blueprint and graph.
- Find the named node or nearby read.
- Ask: "Where is this variable assigned, and can that assignment fail or run later?"
Then prove the answer. Useful checks:
Print String before the Set:
"Setting TargetDoor to " + ToString(TargetDoor)
Print String before the Get:
"Using TargetDoor: " + ToString(TargetDoor)
Is Valid before use:
Is Not Valid -> Print String "TargetDoor missing in BP_DoorButton"
For instance problems, use the Blueprint Debugger's debug-object selector. A breakpoint in the class is not enough if the placed instance you are watching is not the one that is running.
What Accessed None does not mean¶
- It does not mean the variable's type is wrong. The variable can have the right type and still point at nothing.
- It does not mean a cast converts
Noneinto the target class. A cast fromNonefails. - It does not mean Unreal should have created the object for you. Object reference variables are placeholders until assigned.
- It does not mean the fix is always
Delay. A delay can hide an ordering bug and then fail again on a slower machine, respawn, or networked game. - It does not mean multiplayer is involved. Single-player graphs hit this constantly.
- It does not mean the warning is safe to ignore. The graph did not do what that node needed it to do.
Lookalikes - which one am I seeing?¶
| Symptom | Meaning | Usual fix |
|---|---|---|
| Accessed None trying to read property X | An object reference was empty when read. | Assign X earlier or guard optional missing state. |
| Cast Failed path runs | The object exists, but is not that class, or the input was None. |
Use the success path, or choose interface/dispatcher/reference flow. |
| Is Valid returns false | The reference is None or no longer usable. |
Handle the missing path deliberately. |
| Array index out of bounds | The array exists, but the index is not valid. | Check length or use safer selection logic. |
| Compile error | The graph cannot compile before play. | Fix pin types, missing variables, or invalid nodes. |
| Nothing happens and no warning appears | The graph may not be executing, or a branch/filter is skipping it. | Use breakpoints and prints to find execution flow. |
Rule of thumb: Accessed None is a reference lifetime/setup problem first. Debug where the reference comes from before changing the code that consumes it.
Going deeper¶
- Is Valid - the guard for optional or stale object references.
- Try Get Pawn Owner - why Animation Blueprints can legitimately have no pawn owner.
- Get Player Character / Pawn / Controller - why player getters are not a universal owner lookup.
- Spawn Actor from Class - store and validate the Return Value when runtime creation can fail.
- Ownership and lifetime - why references can outlive the thing they used to point at.
- Official docs: Is Valid, Set and Get an Actor Reference, Blueprint Debugger, FFrame::KismetExecutionMessage, FBlueprintExceptionInfo, and EBlueprintExceptionType::Type.
- Engine source (requires engine access - we do not reproduce it here):
Blueprint script exception reporting through
FFrame::KismetExecutionMessageandFBlueprintCoreDelegates::ThrowScriptExceptioninEngine/Source/Runtime/CoreUObject/Private/UObject/ScriptCore.cpp; exception metadata inEngine/Source/Runtime/CoreUObject/Public/Blueprint/BlueprintExceptionInfo.h.