Niagara Multiple Unique Beams with Same Emitter

I have an array of Start Locations and an Array of End Locations that are User Parameters (vector array) that are set on the Niagara system when the weapon fires



The Niagara system component is created and attached to the weapon component when the weapon actor component is created

I am trying to have the Niagara System always there, along with the emitters, and have emitters (there are 2, a static mesh emitter and the beam/ribbon emmitter) spawn beam particles when firing, and when I try setting to “loop behavior” Once and “Loop Duration mode” to Infinite, I do not see a beam spawn - but if i set to Loop Behavior Infinite and loop duration 0 it spawns a beam?




I would figure I want to spawn particles once and have their lifetime only be ended when the weapon is no longer firing, then destroy the particles and spawn new ones when weapon fired, as opposed to spawning particles every tick. However, the beam length can change every tick, so do particles need to be destroyed and respawned for beam to change length? (I would think not, but you never know)

I am trying to use a Burst Instaneous Spawn, and using the User Parameter of Beam_StartLocArray (I need the length of this array?) to control how many particles/ribbons to spawn

Then, I need to spawn all of those Beam partiles using the locations in the start and end location User Parameter Arrays and update each beam length every tick until theydie (Weapon no longer fioring)

I am having trouble figuring out how to access my user parameters in the “Multi Beam” Module Script, using the arrays, and get the proper start and end points for each individual beam?

This is the BeamEmitterSetup_TG_NMS script
This is just a copy of the engine version of BeamEmitterSetup
I am having trouble finding information on how to work with arrays in Niagara, so that each position in an array is associated with a particular beam


At the end of grapgh, there is this section

I am guessing I need to create a sractchpad that will set Emitter.LoopCount to the number of beams, and from looking at this, it seems the beam id will match the loop count.

How do I run a loop, to loop through the beams, get the beam with index from my input array, and set the position start and length for each beam using the unique beam ID?

If you update the beam end dynamically you should be able to loop the beam and not have to retrigger it every tick.

Loop duration Infinite with Loop Behavior once basically won’t make it loop ever since it will never reach the end of the loop (infinite).

That makes sense…but when I select the emitter, I see Loop Behavior Infinite but Duration is a float…duration should be set 0, which is not allowed and is basically set to tick duration, which would tell me it is spawning the beams every tick for infinity?