Quick answer: Unity ObjectPool returning instances whose component references point to destroyed game objects? Pool's Get doesn't reinitialize - reset state in OnGet callback or use Initialize pattern.
Pooled bullet's target reference points to the previous target's destroyed corpse. New shot targets the wrong direction.
Reset in OnGet
actionOnGet: (b) => b.Initialize(),Pool's OnGet callback is the right place to clear per-instance state.
Null fields in OnRelease
Conversely, null out references in OnRelease. Held references prevent GC of the previous owner.
Use Spawn/Despawn pattern
Wrap pool ops in Spawn(prefab) / Despawn(instance) helpers that include reset logic. The pattern enforces the discipline.
“Pooling skips construction. Construction's reset side effects skip too.”
Audit pooled prefab fields for object references. Each reference is a potential dangling pointer; reset every one in OnGet.