Quick answer: Unreal Niagara skeletal mesh DI reading stale data after the mesh is rebuilt? DI caches the skeletal asset pointer; explicit Reset is required after structural changes.
Procedural character: skeleton bones added at runtime. Niagara emitter referencing it samples the pre-rebuild bones.
Reset the DI
Niagara->SetVariableObject("Mesh", NewMesh);
Niagara->ResetSystem();Re-assigns the mesh; ResetSystem clears cached sampling state.
Or use direct sampling
For one-off effects, sample bones in C++ and push positions as parameters. Skips DI entirely.
Validate cache state
Niagara debug overlay shows per-DI cache age. Stale DIs are visible per emitter.
“Data interfaces cache. Caches need invalidation paths.”
Track which DIs cache what. For procedural projects, the cache invalidation map is its own design doc.