Cannot set vector parameter when "System Template" variable is exposed in "Spawn System at location" blueprint node

Hi everyone,

Hope someone can help, I’m probably making a silly mistake. I have this really confusing situation with a “spawn System at location” node for a line trace beam type weapon I built that stops working the moment I promote the “System Template” input variable so I can edit it in any child classes I make from this weapon class.

So what happens is, on firing the weapon, I “Spawn system at location” for a Niagara beam briefly, then set the spawn location to be the muzzle of the weapon (a component in the weapon Blueprint), and set the end point of the beam from the line trace I did beforehand via a set vector parameter.


Variable isn’t promoted/exposed, but beam and Spawn system at location works fine.

Setting the end point makes use of a “set Vector Parameter” for a User Parameter I made in the Niagara beam system that controls the end point. The return value on the “Spawn system at location” stops working the moment the node’s “system template” input variable is being promoted/exposed in blueprint, resulting in the beam never getting spawned or set at all.


Promoted the “System Template” variable of the Spawn system at location node to expose it to child classes of this master class. Beam no longer works and I receive an error.

Any idea why this is happening, or what I’m doing wrong, and how I can fix it? I need this, since this class is a master weapon class, and I have a sub class (a lightning rifle) that needs this functionality to work.


This is the error I receive after promoting the variable for the Spawn system at location node.

when the system template pin is a promoted variable, two things change compared to the direct reference, and together they produce your symptom:

  1. ordering: with a direct template the spawn node can resolve everything inline. with a variable, if the variable is evaluated after the spawn (or the variable is a template asset rather than the spawned component), your set variable call can land on nothing or on the asset instead of the live component. always take the return value of spawn system at location (the niagara component) and call set variable on that, never on the template variable. if the return value is being discarded, that is the bug.
  2. child class overrides: the whole reason you promoted the pin was editing per child. but each child can override the variable with a different template, and a template that does not contain the user parameter your set variable targets will silently ignore the call. verify the parameter name exists on every template a child might assign, names are matched as strings.
    the stable pattern:

spawn system at location (template from variable) then get the returned component, then set variable vector on it, then activate if not auto activate. if you need the parameter before the first frame, use auto activate off, set the parameter, then call activate, otherwise the first frames render with the default value.

worth knowing: this per parameter fiddling gets worse with types blueprint barely exposes. the Expose Niagara Variables C++ & Blueprints plugin gives setters and getters for 18 variable types across all 8 niagara namespaces in blueprint and c++, so the same returned component, set, activate sequence works no matter what type the effect needs: Expose Niagara Variables C++ & Blueprints | Fab