When an Animation Sequence is overridden by a LevelSequence, and later reverts to its original animation state, the AnimInstance fails to properly reinitialize. This prevents subsequent animation logic—such as montage playback—from executing as expected.
Reproduction:
In our test case, we used UAbilitySystemComponent::PlayMontage, which internally calls UAnimInstance::Montage_Play. This eventually leads to a call to UAnimInstance::Montage_PlayInternal.
At this point, the montage fails to play because of the following early-out condition:
// Early out since we might have called UninitializeAnimation() when trigger montage blending out events above.
if (bUninitialized && MontageCVars::bEarlyOutMontageWhenUninitialized)
{ return 0.0f; }The flag bUninitialized remains true because the AnimInstance does not get properly reinitialized after being re-assigned from the sequencer control. As a result, animation logic relying on montage playback (and possibly others) fails silently.
UAnimInstance::Montage_PlayInternal(UAnimMontage *, const FMontageBlendSettings &, float, EMontagePlayReturnType, float, bool) AnimInstance.cpp:2319
UAnimInstance::Montage_Play(UAnimMontage *, float, EMontagePlayReturnType, float, bool) AnimInstance.cpp:2385
UAbilitySystemComponent::PlayMontage(UGameplayAbility *, FGameplayAbilityActivationInfo, UAnimMontage *, float, FName, float) 0x00007ff9cb5c5d5c
UAbilityTask_PlayMontageAndWait::Activate() 0x00007ff9cb571a77
UGameplayTask::PerformActivation() GameplayTask.cpp:289
UFunction::Invoke(UObject *, FFrame &, void *const) Class.cpp:7192
UObject::CallFunction(FFrame &, void *const, UFunction *) ScriptCore.cpp:1147
[Inlined] FFrame::Step(UObject *, void *const) ScriptCore.cpp:482
UObject::ProcessContextOpcode(FFrame &, void *const, bool) ScriptCore.cpp:3114
[Inlined] FFrame::Step(UObject *, void *const) ScriptCore.cpp:482
ProcessLocalScriptFunction(UObject *, FFrame &, void *const) ScriptCore.cpp:1241
ProcessScriptFunction<…>(UObject *, UFunction *, FFrame &, void *const, void [Image Removed](UObject *, FFrame &, void *)) ScriptCore.cpp:1040
`ProcessLocalFunction'::`2'::<lambda_1>::operator()() ScriptCore.cpp:1286
ProcessLocalFunction(UObject *, UFunction *, FFrame &, void *const) ScriptCore.cpp:1302
[Inlined] FFrame::Step(UObject *, void *const) ScriptCore.cpp:482
ProcessLocalScriptFunction(UObject *, FFrame &, void *const) ScriptCore.cpp:1241
UObject::ProcessInternal(UObject *, FFrame &, void *const) ScriptCore.cpp:1329
UFunction::Invoke(UObject *, FFrame &, void *const) Class.cpp:7192
UObject::ProcessEvent(UFunction *, void *) ScriptCore.cpp:2173
[Inlined] UGameplayAbility::K2_ActivateAbility() 0x00007ff9cb51575e
UGameplayAbility::ActivateAbility(FGameplayAbilitySpecHandle, const FGameplayAbilityActorInfo *, FGameplayAbilityActivationInfo, const FGameplayEventData *) GameplayAbility.cpp:882
UGameplayAbility::CallActivateAbility(FGameplayAbilitySpecHandle, const FGameplayAbilityActorInfo *, FGameplayAbilityActivationInfo, TDelegate<…> *, const FGameplayEventData *) GameplayAbility.cpp:997
UAbilitySystemComponent::InternalTryActivateAbility(FGameplayAbilitySpecHandle, FPredictionKey, UGameplayAbility **, TDelegate<…> *, const FGameplayEventData *) 0x00007ff9cb5b261a
UAbilitySystemComponent::TriggerAbilityFromGameplayEvent(FGameplayAbilitySpecHandle, FGameplayAbilityActorInfo *, FGameplayTag, const FGameplayEventData *, UAbilitySystemComponent &) 0x00007ff9cb5d7113
UAbilitySystemComponent::HandleGameplayEvent(FGameplayTag, const FGameplayEventData *) 0x00007ff9cb5ae304
UAbilitySystemBlueprintLibrary::SendGameplayEventToActor(AActor *, FGameplayTag, FGameplayEventData) AbilitySystemBlueprintLibrary.cpp:42
UAbilitySystemBlueprintLibrary::execSendGameplayEventToActor(UObject *, FFrame &, void *const) 0x00007ff9cb5f6b61
UObject::execCallMathFunction(UObject *, FFrame &, void *const) ScriptCore.cpp:1079
[Inlined] FFrame::Step(UObject *, void *const) ScriptCore.cpp:482
ProcessLocalScriptFunction(UObject *, FFrame &, void *const) ScriptCore.cpp:1241
ProcessScriptFunction<…>(UObject *, UFunction *, FFrame &, void *const, void [Image Removed](UObject *, FFrame &, void *)) ScriptCore.cpp:1040
`ProcessLocalFunction'::`2'::<lambda_1>::operator()() ScriptCore.cpp:1286
ProcessLocalFunction(UObject *, UFunction *, FFrame &, void *const) ScriptCore.cpp:1302
[Inlined] FFrame::Step(UObject *, void *const) ScriptCore.cpp:482
ProcessLocalScriptFunction(UObject *, FFrame &, void *const) ScriptCore.cpp:1241
UObject::ProcessInternal(UObject *, FFrame &, void *const) ScriptCore.cpp:1329
UFunction::Invoke(UObject *, FFrame &, void *const) Class.cpp:7192
UObject::ProcessEvent(UFunction *, void *) ScriptCore.cpp:2173
AActor::ProcessEvent(UFunction *, void *) Actor.cpp:1160
TScriptDelegate::ProcessDelegate<…>(void *) ScriptDelegates.h:448
[Inlined] FEnhancedInputActionHandlerDynamicSignature_DelegateWrapper(const TScriptDelegate<…> &, FInputActionValue, float, float, const UInputAction *) 0x00007ff9da638454
[Inlined] FEnhancedInputActionHandlerDynamicSignature::Execute(FInputActionValue, float, float, const UInputAction *) EnhancedInputComponent.h:23
[Inlined] TEnhancedInputUnifiedDelegate::Execute(FInputActionValue, float, float, const UInputAction *) EnhancedInputComponent.h:119
FEnhancedInputActionEventDelegateBinding::Execute(const FInputActionInstance &) EnhancedInputComponent.h:321
UEnhancedPlayerInput::EvaluateInputDelegates(const TArray<…> &, const float, const bool, const TArray<…> &) EnhancedPlayerInput.cpp:646
UPlayerInput::ProcessInputStack(const TArray<…> &, const float, const bool) PlayerInput.cpp:1172
APlayerController::ProcessPlayerInput(const float, const bool) PlayerController.cpp:2776
APlayerController::TickPlayerInput(const float, const bool) PlayerController.cpp:5123
APlayerController::PlayerTick(float) PlayerController.cpp:2378
APlayerController::TickActor(float, ELevelTick, FActorTickFunction &) PlayerController.cpp:5276
FActorTickFunction::ExecuteTick(float, ELevelTick, Type, const TRefCountPtr<…> &) Actor.cpp:284
[Inlined] FTickFunctionTask::DoTask(Type, const TRefCountPtr<…> &) TickTaskManager.cpp:306
TGraphTask::ExecuteTask() TaskGraphInterfaces.h:634
UE::Tasks::Private::FTaskBase::TryExecuteTask() TaskPrivate.h:504
[Inlined] FBaseGraphTask::Execute(TArray<…> &, Type, bool) TaskGraphInterfaces.h:482
FNamedTaskThread::ProcessTasksNamedThread(int, bool) TaskGraph.cpp:779
FNamedTaskThread::ProcessTasksUntilQuit(int) TaskGraph.cpp:667
[Inlined] FTaskGraphCompatibilityImplementation::ProcessThreadUntilRequestReturn(Type) TaskGraph.cpp:1453
FTaskGraphCompatibilityImplementation::WaitUntilTasksComplete(const TArray<…> &, Type) TaskGraph.cpp:1526
FTickTaskSequencer::ReleaseTickGroup(ETickingGroup, bool) TickTaskManager.cpp:814
FTickTaskManager::RunTickGroup(ETickingGroup, bool) TickTaskManager.cpp:1865
UWorld::RunTickGroup(ETickingGroup, bool) LevelTick.cpp:773
UWorld::Tick(ELevelTick, float) LevelTick.cpp:1496
UEditorEngine::Tick(float, bool) EditorEngine.cpp:2138
UUnrealEdEngine::Tick(float, bool) UnrealEdEngine.cpp:547
FEngineLoop::Tick() LaunchEngineLoop.cpp:5871
[Inlined] EngineTick() Launch.cpp:69
GuardedMain(const wchar_t *) Launch.cpp:190
LaunchWindowsStartup(HINSTANCE__ *, HINSTANCE__ *, char *, int, const wchar_t *) LaunchWindows.cpp:266
WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int) LaunchWindows.cpp:317
[Inlined] invoke_main() 0x00007ff79911f0ca
__scrt_common_main_seh() 0x00007ff79911f0a9
<unknown> 0x00007ffb2f007374
<unknown> 0x00007ffb30e1cc91
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-290889 in the post.
0 |
Component | UE - Anim - Sequencer |
---|---|
Affects Versions | 5.5, 5.6 |
Target Fix | 5.7 |
Created | May 28, 2025 |
---|---|
Updated | Jun 23, 2025 |