Trying to spawn niagara system in C++, crashing


I am relatively in-experienced in C++ in general, but have done a few courses. I am attempting to spawn a niagara system similar to the way one would spawn a normal particle system with UGameplayStatics. I have found a few reddit threads with example code, but i still get a crash for an unhandled exception because I believe I am not properly setting up my system class pointer used in the UNiagaraFunctionLibrary::SpawnSystemAtLocation() function.

I have Niagara added to my build module list. I am using this in my header :

UPROPERTY(EditAnywhere, Category = "Effects")
UNiagaraSystem* OpenEffect;

I am forward declaring the UNiagaraSystem class in my header. Then I have these includes in my cpp:

#include "NiagaraComponent.h"
#include "NiagaraFunctionLibrary.h"
#include "NiagaraSystem.h"

Then I use this in my implementation:

if (OpenEffect->IsValid())
        UNiagaraComponent* NewEffect = UNiagaraFunctionLibrary::SpawnSystemAtLocation(

I get a crash whenever that code is run in runtime that gives me the unhandled exception at a mem address and references the line with the if statement, so I am assuming that my OpenEffect pointer is somehow not resolving properly. I’m sure I am doing somethign very basically wrong, but without any examples for using Niagara in C++ in any of the documentation I am at a loss. I can succesfully add a Niagara component to my Actor class and use the component’s Activate() function to get what I need for now, but am very curious how I can go about spawning without the built in Actor component as done with the UGameplayStatics method for triggering old cascade particles.

Any pointers would be much appreciated! Thanks


Does this change prevent it from crashing?

if (OpenEffect && OpenEffect->IsValid())

Hi @nullterm adding that extra check does get me past that line, and if I haven’t defined the system in BP it does not crash, but if i define a system in that property then I will get the crash in the line calling the SpawnSystemAtLocation function instead. I had seen some examples using the LoadObject function in a hard set path sort of way for a system, which I will try, but my assumption was that using the UPROPERTY syntax in the header takes care of this need, but I may be misinformed. Going to keep digging, but would love to hear other thoughts!


Ok, upon further investigation, my error is in the Location argument of the Spawn function, my GetOwner()->GetActorLocation() seems to have been inappropriate! Obviously very silly mistake, since i’m in my main Actor class I guess GetOwner() doesn’t actually give me an actor to then GetActorLocation with, so replacing with just GetActorLocation() resolves my crash. Sorry for the total C++ noob post, but maybe it helps someone else!