I’ve tried this one and it generates error : ‘UWorld::UWorld’ : no appropriate default constructor available
h:
static AActor* SpawnActorTemplate(UClass * class_, FVector location_, FRotator rotation_,AActor* owner_, APawn* instigator_, AActor* iemplate_);
cpp:
AActor* UMyBlueprintFunctionLibrary::SpawnActorTemplate(UClass * class_, FVector location_, FRotator rotation_, AActor* owner_, APawn* instigator_, AActor* template_)
{
FActorSpawnParameters SpawnParameters_;
SpawnParameters_.Owner = owner_;
SpawnParameters_.Instigator = instigator_;
SpawnParameters_.Template = template_;
FVector* locationPtr = &location_;
FRotator* rotationPtr = &rotation_;
return (AActor*) UWorld()->SpawnActor(class_, locationPtr, rotationPtr, SpawnParameters_);
}
Marc_Audy
(Marc_Audy)
March 3, 2015, 7:21pm
2
UWorld() would be constructing an instance of World and then calling the function on that pointer.
What you need to do is pass in a world context to your function and then call spawn actor on that. You can see some examples of this in GameplayStatics.h:
UFUNCTION(BlueprintCallable, Category="Spawning", meta=(WorldContext="WorldContextObject", UnsafeDuringActorConstruction = "true", BlueprintInternalUseOnly = "true"))
static class AActor* BeginSpawningActorFromClass(UObject* WorldContextObject, TSubclassOf<AActor> ActorClass, const FTransform& SpawnTransform, bool bNoCollisionFail = false);
This indicates that the argument WorldContextObject will be invisible and auto-populated with the self of the calling context unless that calling context is unable to provide a world in which case the pin will be visible and required to be hooked up.
Then in the implementation of the function you can get the World
UWorld* World = GEngine->GetWorldFromContextObject(WorldContextObject);
Also note the UnsafeDuringActorConstruction … you’ll want that specified as it is not valid to call SpawnActor during construction scripts, so this will prevent it from being placed/called in the construction script.
UWorld() would be constructing an instance of World and then calling the function on that pointer.
What you need to do is pass in a world context to your function and then call spawn actor on that. You can see some examples of this in GameplayStatics.h:
UFUNCTION(BlueprintCallable, Category="Spawning", meta=(WorldContext="WorldContextObject", UnsafeDuringActorConstruction = "true", BlueprintInternalUseOnly = "true"))
static class AActor* BeginSpawningActorFromClass(UObject* WorldContextObject, TSubclassOf<AActor> ActorClass, const FTransform& SpawnTransform, bool bNoCollisionFail = false);
This indicates that the argument WorldContextObject will be invisible and auto-populated with the self of the calling context unless that calling context is unable to provide a world in which case the pin will be visible and required to be hooked up.
Then in the implementation of the function you can get the World
UWorld* World = GEngine->GetWorldFromContextObject(WorldContextObject);
Also note the UnsafeDuringActorConstruction … you’ll want that specified as it is not valid to call SpawnActor during construction scripts, so this will prevent it from being placed/called in the construction script.
Thanks a lot for the great explanation ! I will check this out soon
Peter_N_K
(Peter N K)
November 11, 2017, 12:38pm
4
TArray<APlayerController*> PCarr;
GEngine->GetAllLocalPlayerControllers(PCarr);
//if (pLP)
if ((PCarr.Num()>0) && (PCarr[0]))
{
use PCarr[0]