Recycle actors instead of spawning and destroying them — with an explicit acquire/release API and a documented path for replicated actors.
Free · Performance · Unreal Engine 5
Spawn it once. Reuse it all match.
Projectiles, impact effects, pickups, shell casings and summoned turrets pay for a full SpawnActor and Destroy every single time. CrimsonObjectPool replaces that with a per-world subsystem that recycles actors by class — Acquire Actor hands you a live instance, Release Actor parks it, and the next acquire reuses it. Replicated actors included.
Why CrimsonObjectPool
Pooling that stays predictable — explicit at every call site, correct over the network, and removable in one command.
Explicit, never implicit
The plugin never hooks engine spawn paths. An actor is pooled only where you asked for it to be, so there is no hidden behaviour to reason about when something goes wrong — and nothing changes for the rest of your project.
Replicated actors, done right
Parked actors go dormant rather than being hidden away at a far-off location — because a hidden, non-colliding or net-culled actor loses relevancy, and that makes every client destroy its copy, which is exactly the cost the pool exists to remove.
Bulk spawns without the hitch
Queue acquires and the pool serves them across frames under a MaxSpawnsPerFrame budget. Requests a warm pool can fill from its free list skip the budget entirely — only real spawns are throttled.
Sizing you control per class
Set capacity, growth policy (Grow or HardCap) and prewarm counts globally or per actor class. Class-override lookup walks up the hierarchy, so one entry can cover a whole family of projectiles.
Counters that prove it works
Crimson.ObjectPool.Dump prints pooled, live, high-water, created and spawns-avoided per class. If created keeps climbing, instances aren't being released — and you can see it in one command.
Rule pooling out instantly
Crimson.ObjectPool.Bypass 1 turns every acquire into a real SpawnActor and every release into a real Destroy. Reproduce a bug with pooling off and you know immediately whether the pool is involved.
A closer look
Two node swaps and you're pooling
Replace Spawn Actor from Class with Acquire Actor, and Destroy Actor with Release Actor. That's the whole integration for a cosmetic actor — no interface, no subclass, no settings changes. You cannot tell whether an acquire recycled or spawned, and you don't need to.
The reuse contract
A pooled actor is never destroyed, so BeginPlay runs once per lifetime, not once per use. One-way latches stay latched and per-use delegate bindings multiply. Implement the optional ICrimsonPoolable hooks to control reactivation yourself — it ships in CrimsonCommon, so any plugin's actor can be pooled with no glue code.
The trap that reaches production
COND_InitialOnly sends a property only in an actor's first bunch. A recycled actor's channel is already open on its second use, so the condition is skipped, the property is never resent, and clients keep acting on the first use's data. Nothing errors and nothing logs — which is why the docs call it out before you write the code.
Technical details
- Engine
- UE 5.8
- Platforms
- Windows, Mac, Linux
- Blueprint-ready
- Yes
- C++ required
- No
- Network replicated
- Yes
- Dependencies
- CrimsonCommon, DeveloperSettings, NetCore
- Last updated
- July 2026
Frequently asked questions
Do I need C++ to use it?
GetPoolReleaseDelegate — an optional way for an actor to reclaim itself — is C++-only, because a Blueprint cannot hand out a delegate reference. Blueprints call Release Actor instead.Does it work in multiplayer?
Do I have to implement an interface?
ICrimsonPoolable makes your OnAcquiredFromPool the only reactivation that happens, which is what you want when an actor needs to reset its own state.Does it depend on other Crimson plugins?
ICrimsonPoolable contract. The interface lives there rather than here so that actors in other Crimson plugins can be pooled with no glue code, which is exactly how ACrimsonProjectile works.Is it really free?
Stop paying for spawns you already paid for
Swap two nodes, watch spawnsAvoided climb, and keep the bypass switch in your pocket for the day something looks wrong. The Quick Start pools a cosmetic actor end to end in about five minutes.
Ready for more? Add a premium system
You're already on the Crimson foundation — these paid systems drop straight in, no glue code.
Data-driven hit detection for melee, area, hitscan and projectiles.
- GAS Target Data
- Interpolated Sweeps
- Composable Filters
- Hit Zones
- Pooled Projectiles
A full Gameplay Ability System layer for UE5.
- Custom ASC & Abilities
- Slot-Based Augments
- Modifiers & Phases
- Graph-Based Combos
Layout-agnostic, fully replicated inventory and crafting.
- Pluggable Topology
- Runtime Constraints
- Scoped Containers
- No RPCs to Write