I have an Ability that kicks off a montage using UAbilityTask_PlayMontageAndWait.
In ActivateAbility, I have the following code.
if (MontageToPlay != nullptr && AnimInstance != nullptr && AnimInstance->GetActiveMontageInstance() == nullptr)
{
UAbilityTask_PlayMontageAndWait* montageTask = UAbilityTask_PlayMontageAndWait::CreatePlayMontageAndWaitProxy(this, "Attack", MontageToPlay);
montageTask->OnBlendOut.AddDynamic(this, &UGameplayAbilityMontage::BlendingOutCallback);
montageTask->OnInterrupted.AddDynamic(this, &UGameplayAbilityMontage::InterruptedCallback);
montageTask->OnCancelled.AddDynamic(this, &UGameplayAbilityMontage::CanceledCallback);
montageTask->OnCompleted.AddDynamic(this, &UGameplayAbilityMontage::CompletedCallback);
montageTask->Activate();
}
All of those callbacks will call EndAbility. I’ve split them out for debugging purposes.
For the most part, OnBlendOutCallback will get called. Some times, in game, the animations will stop and this individual actor will stop doing anything. In my logs, I see that the montage was started, but none of the callbacks were called, so EndAbilitynever gets called, and it’s stuck because this ability never ends.
Is there any other way for the montage task to end? Is there anything else I need to check for? Are there any known bugs?
I’m using 5.3.