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.