The solution to this issue was found by Sebastian Kolbu
First of all UCLASS(Abstract)
was added to prevent the C++ implementation from being instantiated.
The subsystem was not being picked up properly for asset scan. This was solved by going “Project Settings” → “Game” → “Asset Manager”, then adding a new entry to the Primary Asset Types To Scan
. Just referencing the asset seemed to do the trick for me.
Exactly what subsystem instance we got prior to this, I don’t know. For some reason it would be a valid object to operate on, yet the methods returned nothing (even after locally changing the C++ GetMyString
to default implementation return TEXT("C++")
).
FString UMyGameInstanceSubsystemCpp::GetMyString_Implementation() const
{
return TEXT("C++");
}
In the screenshot (Standalone) you can see that I am printing two things: BP and C++. This is done by explicitly getting the BP version of the Subsystem, as well as the C++ version. If set up properly, since the C++ version is abstract, it will return the BP version (which should be the only instantiated one). So now regardless of which type I am trying to get, I am given the BP
