It’s worth mentioning that at the moment, subsystems aren’t really intended to be blueprinted and used in that fashion. You may have better luck with an EditorSubsystem than the other types, but it’s still a little sketchy.
First off, none of the subsystem functions are designed to be implemented by blueprint. This means that any subsystem decisions you want made by blueprint have to be done either in native or through custom functions to involve blueprints.
Secondly, guaranteeing that the blueprint is loaded in time for the subsystem to be created can be tricky. I’m not sure about EditorSubsystems, but in the case of GameInstanceSubsystems there’s not really a good hook that allows loading the blueprints before those systems are created by the engine. World and LocalPlayer ones are more feasible, but it can still be very tricky depending on various factors.
Even the Epic implementation for GameFeatures that injects “subsystems” does so by spawning Actors instead of trying to make blueprints of actual subsystems. Currently it’s considered a better option to use either config variables or a DeveloperSettings object to configure anything for a subsystem that should be done through the editor instead of trying to create a blueprint. As well as keeping any logic in native.
At the moment I’m only using them to get instances of other blueprints, menus, levels, and some materials. I basically use them to replace constructorhelpers and take advantage of redirectors. Everything else is pure C++ code.
I also wanted to use it for some particle and material effects on the character or the world.
I was using actor components, but I realized that it is not a very good idea because the character becomes more and more heavy (and that is multiplied by each player).
So if for example i have 10 players and i want to apply the same material to each player’s character.
If I use an actor component I have 10 different material instances (On each computer).
But if I use the GameInstance i only have a single instance of the material per computer.
At the moment I think the most critical thing would be that it did not load the main menu on time (I must check it).
It’s the first time I do this so I don’t know if it will work or not…
So I’ll test it and see how it goes. If I see that there are problems during the load I will try the other types of subsystems as you recommend.
That’s why I really appreciate your comment. You probably saved me from a headache if things didn’t turn out the way I expected.
If that’s all you’re doing, then I’d really suggest that you take a look into DeveloperSettings. Those are things you can set just like other properties as part of the Project Settings menu and would likely work better for your use case than a subsystem.