AWorldPickupItem needs to spawn it’s own blueprint version. I tried many different approaches but none worked.
The other examples I could find all don’t work because they are not deferred and/or not static. The problem is that it is a static-blueprint-deferred-spawn.
Header:
static TSubclassOf<class UBlueprint> WorldPickupItem_BPClass;
static AWorldPickupItem* SpawnBlueprint(UWorld* World, ABaseItem* ItemToPickup, FTransform SpawnTransform);
CCP:
// not sure where to put this, putting it in the constructor gives me a linker-error. But FObjectFinder MUST be used inside a constructor... But how does that work for statics...
if (!WorldPickupItem_BPClass)
{
static ConstructorHelpers::FObjectFinder<UBlueprint> WorldPickupItem_BPClassObj(TEXT("/Game/Blueprints/WorldPickupItem_BP"));
if (WorldPickupItem_BPClassObj.Succeeded())
{
WorldPickupItem_BPClass = (UClass*)WorldPickupItem_BPClassObj.Object->GeneratedClass;
}
else
{
LOG_ERROR_STATIC("Failed to retrieve WorldPickupItem_BPClass.")
}
}
// Static method
AWorldPickupItem* AWorldPickupItem::SpawnBlueprint(UWorld* World, ABaseItem* ItemToPickup, FTransform SpawnTransform)
{
AWorldPickupItem* SpawnedWorldPickupItem = World->SpawnActorDeferred<AWorldPickupItem>(WorldPickupItem_BPClass, SpawnTransform, nullptr, nullptr, ESpawnActorCollisionHandlingMethod::AlwaysSpawn);
if (SpawnedWorldPickupItem != nullptr)
{
SpawnedWorldPickupItem->ItemToPickup = ItemToPickup;
UGameplayStatics::FinishSpawningActor(SpawnedWorldPickupItem, SpawnTransform);
}
return SpawnedWorldPickupItem;
}