You drop a Spawn Actor from Class node, hit play, and... nothing. No actor, no error, no log line. Or it spawns, but ignores the values you set one node later. Spawning looks like the simplest thing in Unreal — one node in, one actor out. The reasons it quietly misbehaves are what this post is about.
Spawn Actor, the one-node version
The node is Spawn Actor from Class. Give it a Class and a Transform, it hands back the new actor. For most of what you do — a pickup, an enemy, a projectile — that's genuinely all you need. The trouble starts with the edge cases, and it almost always shows up as "nothing happened, and there's no error to chase".
Why your actor silently doesn't spawn
Look at the Collision Handling Override pin. Its default resolves, for most classes, to Do Not Spawn if Overlapping. So if your spawn point overlaps anything — the floor, another actor, the player's capsule — the spawn is cancelled and returns None. No error. No log. This is where beginners lose an afternoon.
Your options:
- Always Spawn, Ignore Collisions — spawn no matter what. The most common fix.
- Try To Adjust Location, But Always Spawn — nudge to a free spot, but spawn regardless.
- Adjust Location, Don't Spawn If Still Colliding — nudge, give up if there's no room.
- Do Not Spawn — the strict default that bites you.
Pick deliberately. For a coin dropping onto the floor, "Always Spawn, Ignore Collisions" is almost always what you meant.
Set variables the right way: deferred spawn
Here's the classic bug. You Spawn Actor, then Set MyVar on the result. But the actor's BeginPlay already ran — using the default value, not the one you just set. Anything BeginPlay did with that variable is now wrong, and it looks like the variable "didn't take".
Two clean fixes:
- Expose on Spawn — tick
Expose on Spawn(and Instance Editable) on the variable. It shows up as an input pin right on the Spawn Actor node. Set it there and it's in place before BeginPlay. - Spawn Actor Deferred — for setup too involved for pins.
Spawn Actor Deferredcreates the actor but pauses before BeginPlay. Set whatever you need, then callFinish Spawning. BeginPlay runs after, with your values already applied.
The rule: if BeginPlay reads it, it has to be set before BeginPlay. Pins or deferred — never a plain Set afterwards.
Don't forget the transform
Spawn needs a Transform. Leave it at default and every actor stacks at world origin (0,0,0) — a pile of enemies at the map's corner. Build the transform: Make Transform with the location you want, or grab a spawn point's GetActorTransform. Spawning relative to another actor? Use its transform as the base.
Always check the result
Spawn can return None — collision override, an abstract class, an invalid class reference. If the next node uses that result blind, you get Accessed None (the most common Blueprint error). Branch on Is Valid right after the spawn, before you touch the actor.
Owner and Instigator matter more than you think
Two optional pins almost everyone ignores. Owner is who owns the actor — it matters for replication and some cleanup. Instigator is the Pawn responsible — it matters for damage attribution. Spawn a projectile without setting Instigator and kill credit, friendly-fire checks and assist tracking all silently break. Two pins now, or a baffling bug later.
Plugin tip
Spawning is step one — then you usually configure the actor: toggle visibility, attach a component, set its starting state. That's a pile of small nodes you rewrite every time.
FoxActor bundles the actor-utility side — state, components, combat helpers, visibility queries — into ready-made nodes. Optional, but it trims the post-spawn boilerplate.Common pitfalls
- Collision override left on default. The number-one "it didn't spawn and there's no error" cause. Set it on purpose.
- Setting variables after Spawn. Too late for BeginPlay. Use Expose on Spawn or Spawn Actor Deferred.
- Default transform. Everything piles up at world origin. Build the transform.
- No null check. Spawn can fail;
Is Validbefore you use the result. - Spawning in Tick. One stray spawn per frame is thousands of actors in seconds. Gate it behind an event or a condition.
- Forgetting Instigator on projectiles. Damage and kill credit break with no error.
How to debug a failed spawn
- Result is None? It's almost always the collision override. Switch to "Always Spawn, Ignore Collisions" and see if the actor appears — if it does, that was it.
- Spawns but runs on default values? BeginPlay ran before your Set. Move the variable to Expose on Spawn or go deferred.
- A
Print Stringin the spawned actor's BeginPlay showing the variable tells you instantly whether your value arrived in time.
The 30-second recap
Spawn Actor from Classneeds a Class and a real Transform.- Collision Handling Override on default = silent
Nonewhen the spot is occupied. Set it deliberately. - Variables BeginPlay depends on → Expose on Spawn or Spawn Actor Deferred + Finish Spawning.
- Null-check the result with
Is Valid. - Set Owner / Instigator for projectiles and anything that deals damage.
Next Sunday, votes permitting: Reading JSON & CSV in Blueprints — the native nodes you didn't know shipped, their limits, and getting external data into your game at runtime.
— Marco
Comments
Leave a comment