Description

When you create a latent function in C++ with the FLatentActionInfo first it will incorrectly set up the linkage for the latent info such that it gets linked to the incoming execution pin of the function node rather than the output execution pin. This means whenever the latent action completes it will call the original function again, re-adding it to the LatentActionManager in an infinite loop. 

Steps to Reproduce
  • Create or edit an actor in C++
  • Add the following functions to the class

 

UFUNCTION(BlueprintCallable, category = Test, meta = (Latent, LatentInfo = "LatentInfo))
void Latent_NoArgs(FLatentActionInfo LatentInfo)
{
    UE_LOG(LogTemp, Warning, TEXT("Latent_NoArgs called"));
    UKismetSystemLibrary::Delay(this, 1.f, LatentInfo);
};

UFUNCTION(BlueprintCallable, category = Test, meta = (Latent, LatentInfo = "LatentInfo))
void Latent_OtherArgsLast(FLatentActionInfo LatentInfo, int A)
{
    UE_LOG(LogTemp, Warning, TEXT("Latent_OtherArgsLast called"));
    UKismetSystemLibrary::Delay(this, 1.f, LatentInfo);
};

UFUNCTION(BlueprintCallable, category = Test, meta = (Latent, LatentInfo = "LatentInfo))
void Latent_OtherArgsFirst (int A, FLatentActionInfo LatentInfo)
{
     UE_LOG(LogTemp, Warning, TEXT("Latent_OtherArgsFirst called"));
     UKismetSystemLibrary::Delay(this, 1.f, LatentInfo);
};
  • Create a blueprint derived from this class and in begin play call all 3 nodes in sequence with a print connected to their completed pin
  • Add the new blueprint actor to a scene and hit play
  • You should notice that only the print connected to `Latent_OtherArgsFirst`'s completed pin will fire where as the other two functions will just print their log warning every second

 

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-159823 in the post.

1
Login to Vote

Unresolved
ComponentUE - Gameplay - Blueprint Compiler
Affects Versions5.0.2
Target Fix5.1
CreatedJul 18, 2022
UpdatedJul 20, 2022