Blueprint Subsystem derived from C++ are not shown in blueprint

I have created a subsystem in C++ and use BlueprintType and Blueprintable maroc. Cause i want to expose some property for blueprint to modify as config, I marked C++ subsystem as abstract to make sure it will not created. Than i create a BP subsystem, and it works fine with my C++ code. However, i found i can’t access it from another blueprint. I can only found MyWorldSubsystem however BP_MyWorldSubsystem is disappear. And I found sometimes, the access in C++ of MyWorldSubsystem keeps getting null until i open the blueprint once.

1 Like

i had trouble with blueprintable subsytems too, things that helped me

make sure your plugin has LoadingPhase: PreDefault
Add the blueprint Subsystem to the asset manager
you blueprint subsystems require that the c++ system is loaded so make sure
ShouldCreateSubsystem is true;
restart engine.

1 Like

The BP subsystem is my game module, i’m not sure whether i should change the load phase from
Default to PreDefault. I doubt that blueprint subsystem require that C++ system ShouldCreateSubsystem is true cause this only works at runtime on CDO. It only affect whether the subsystem is truly created, but doesn’t mater try to get it from blueprint. Cause you can still use getworld()->GetWorldSubsystem() to get the subsystem that never created at runtime. in this case you get nullptr. I haven’t try Add blueprint subsystem to asset manager yet, I will test it. Now my solution is rewrite the Module Rules to load the bp subsystem by path in startup module, now it works fine.

1 Like

i agree that the c++ base shouldnt matter , i event set it to abstract but just would not work without it for me. :man_shrugging:

if i didnt add it to the asset manager, it would sometimes work and sometimes not but when i added them they always worked.

all very strange but honestly i just think BP Subsystems arent very well supported, i ended up scapping it and just using actor components