On 4.15 release, on packaged / standalone game, it appears UBlueprint pointers in assets are being corrupted.
Our project uses DataAssets to store data on gameplay objects. One of the properties is a link to a Blueprint actor.
UPROPERTY(EditAnywhere, Category = Content)
UBlueprint* Template;
I then use this to spawn the Blueprint actor from C++, using Template->GeneratedClass as a class. This design enables a clean interface to create gameplay objects and link them with a skin, and has been working for a few years now. It also works in PIE, even on 4.15.
But on packaged 4.15 builds, the “Template” attribute becomes invalid. “check(Template)” will fail, and Template->GeneratedClass will raise a segmentation fault. The logs will also be spammed when the DataAssets are loaded. See below.
LogUObjectGlobals:Warning: Failed to find object ‘Object /Game/Ships/Templates/BP_Dragon.BP_Dragon’
I have ensured that the missing Blueprint objects are indeed existing in the game at load, using the asset registry. All Blueprint actors are accounted for, so the packaging process has correctly packaged them.
const IAssetRegistry& Registry = FModuleManager::LoadModuleChecked<FAssetRegistryModule>("AssetRegistry").Get();
TArray<FAssetData> TemplateList;
Registry.GetAssetsByClass(UBlueprint::StaticClass()->GetFName(), TemplateList);
// All missing Blueprint assets are indeed present in TemplateList
From what I can gather, it looks like UBlueprints pointers are corrupt at load, while the asset itself is present.
EDIT : mark this bug as UE Release, not Preview.