UE5 3D Bullet Hell with Niagara Help

I’ve read in multiple forum posts that the more optimal approach to doing many projectiles is to solve movement and collision in blueprints, then send that data to niagara for rendering. The naive approach being either having niagara do everything and use callbacks to send collision data back to blueprints or instantiating an actor and particle for every projectile. Firstly for movement, would I use something like an array of “projectile” structs in a single “manager” blueprint that would loop through on tick and add world location the derivative of whatever parametric curve I want? Then for solving collision, I’ve heard that both colliders and traces are unperformant, so what would an efficient solution be? (pythagorean theorem on vector3s?) Finally, how do I actually send the data to niagara and have niagara render a mesh and particle system for each projectile? I also would like to avoid using custom C++ as much as possible.

Thanks!