How to use Montages with Sequence Evaluators in Animation Blueprints?

I’m trying to use a montage in a sequence evaluator as such:

but everytime I compile it crashes the engine with the following error:

Assertion failed: false [File:Runtime/Engine/Classes/Animation/AnimMontage.h] [Line: 762]

libUnrealEditor-Engine.so!UAnimMontage::GetAnimationPose(FAnimationPoseData&, FAnimExtractContext const&) const [/mnt/horde/++UE5/Sync/Engine/Source/Runtime/Engine/Classes/Animation/AnimMontage.h:762]
libUnrealEditor-AnimGraphRuntime.so!FAnimNode_SequenceEvaluatorBase::Evaluate_AnyThread(FPoseContext&) [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/AnimGraphRuntime/Private/AnimNodes/AnimNode_SequenceEvaluator.cpp:95]
libUnrealEditor-Engine.so!FPoseLink::Evaluate(FPoseContext&) [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Engine/Private/Animation/AnimNodeBase.cpp:391]
libUnrealEditor-Engine.so!FAnimInstanceProxy::EvaluateAnimationNode_WithRoot(FPoseContext&, FAnimNode_Base*) [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Engine/Private/Animation/AnimInstanceProxy.cpp:1478]
libUnrealEditor-Engine.so!FAnimInstanceProxy::EvaluateAnimation_WithRoot(FPoseContext&, FAnimNode_Base*) [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Engine/Private/Animation/AnimInstanceProxy.cpp:1399]
libUnrealEditor-Engine.so!UAnimInstance::ParallelEvaluateAnimation(bool, USkeletalMesh const*, FParallelEvaluationData&) [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Engine/Private/Animation/AnimInstance.cpp:844]
libUnrealEditor-Engine.so!USkeletalMeshComponent::EvaluateAnimation(USkeletalMesh const*, UAnimInstance*, UE::Math::TVector<double>&, FBlendedHeapCurve&, FCompactPose&, UE::Anim::FHeapAttributeContainer&) const [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Engine/Private/Components/SkeletalMeshComponent.cpp:2088]
libUnrealEditor-Engine.so!USkeletalMeshComponent::PerformAnimationProcessing(USkeletalMesh const*, UAnimInstance*, bool, TArray<UE::Math::TTransform<double>, TSizedDefaultAllocator<32> >&, TArray<UE::Math::TTransform<double>, TSizedDefaultAllocator<32> >&, UE::Math::TVector<double>&, FBlendedHeapCurve&, UE::Anim::FMeshAttributeContainer&) [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Engine/Private/Components/SkeletalMeshComponent.cpp:2174]
libUnrealEditor-Engine.so!USkeletalMeshComponent::ParallelAnimationEvaluation() [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Engine/Private/Components/SkeletalMeshComponent.cpp:4102]
libUnrealEditor-Engine.so!USkeletalMeshComponent::DoParallelEvaluationTasks_OnGameThread() [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Engine/Private/Components/SkeletalMeshComponent.cpp:2625]
libUnrealEditor-Engine.so!USkeletalMeshComponent::RefreshBoneTransforms(FActorComponentTickFunction*) [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Engine/Private/Components/SkeletalMeshComponent.cpp:2526]
libUnrealEditor-UnrealEd.so!UDebugSkelMeshComponent::RefreshBoneTransforms(FActorComponentTickFunction*) [/mnt/horde/++UE5/Sync/Engine/Source/./Editor/UnrealEd/Private/Animation/DebugSkelMeshComponent.cpp:881]
libUnrealEditor-Engine.so!USkinnedMeshComponent::TickComponent(float, ELevelTick, FActorComponentTickFunction*) [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Engine/Private/Components/SkinnedMeshComponent.cpp:1426]
libUnrealEditor-Engine.so!USkeletalMeshComponent::TickComponent(float, ELevelTick, FActorComponentTickFunction*) [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Engine/Private/Components/SkeletalMeshComponent.cpp:1715]
libUnrealEditor-UnrealEd.so!UDebugSkelMeshComponent::TickComponent(float, ELevelTick, FActorComponentTickFunction*) [/mnt/horde/++UE5/Sync/Engine/Source/./Editor/UnrealEd/Private/Animation/DebugSkelMeshComponent.cpp:1244]
libUnrealEditor-Engine.so!FActorComponentTickFunction::ExecuteTick(float, ELevelTick, ENamedThreads::Type, TRefCountPtr<FGraphEvent> const&) [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Engine/Private/Components/ActorComponent.cpp:1170]
libUnrealEditor-Engine.so!FTickFunctionTask::DoTask(ENamedThreads::Type, TRefCountPtr<FGraphEvent> const&) [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Engine/Private/TickTaskManager.cpp:275]
libUnrealEditor-Engine.so!TGraphTask<FTickFunctionTask>::ExecuteTask(TArray<FBaseGraphTask*, TSizedDefaultAllocator<32> >&, ENamedThreads::Type, bool) [/mnt/horde/++UE5/Sync/Engine/Source/Runtime/Core/Public/Async/TaskGraphInterfaces.h:1235]
libUnrealEditor-Core.so!FNamedTaskThread::ProcessTasksNamedThread(int, bool) [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Core/Private/Async/TaskGraph.cpp:760]
libUnrealEditor-Core.so!FNamedTaskThread::ProcessTasksUntilQuit(int) [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Core/Private/Async/TaskGraph.cpp:650]
libUnrealEditor-Core.so!FTaskGraphCompatibilityImplementation::WaitUntilTasksComplete(TArray<TRefCountPtr<FGraphEvent>, TSizedInlineAllocator<4u, 32, TSizedDefaultAllocator<32> > > const&, ENamedThreads::Type) [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Core/Private/Async/TaskGraph.cpp:2122]
libUnrealEditor-Engine.so!FTickTaskSequencer::ReleaseTickGroup(ETickingGroup, bool) [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Engine/Private/TickTaskManager.cpp:555]
libUnrealEditor-Engine.so!FTickTaskManager::RunTickGroup(ETickingGroup, bool) [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Engine/Private/TickTaskManager.cpp:1582]
libUnrealEditor-Engine.so!UWorld::Tick(ELevelTick, float) [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Engine/Private/LevelTick.cpp:1499]
libUnrealEditor-Persona.so!FAnimationEditorPreviewScene::Tick(float) [/mnt/horde/++UE5/Sync/Engine/Source/./Editor/Persona/Private/AnimationEditorPreviewScene.cpp:1213]
libUnrealEditor-UnrealEd.so!FTickableEditorObject::TickObjects(float) [/mnt/horde/++UE5/Sync/Engine/Source/Editor/UnrealEd/Public/TickableEditorObject.h:49]
libUnrealEditor-UnrealEd.so!UEditorEngine::Tick(float, bool) [/mnt/horde/++UE5/Sync/Engine/Source/./Editor/UnrealEd/Private/EditorEngine.cpp:1770]
libUnrealEditor-UnrealEd.so!UUnrealEdEngine::Tick(float, bool) [/mnt/horde/++UE5/Sync/Engine/Source/./Editor/UnrealEd/Private/UnrealEdEngine.cpp:547]
UnrealEditor!FEngineLoop::Tick() [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Launch/Private/LaunchEngineLoop.cpp:5915]
UnrealEditor!GuardedMain(char16_t const*) [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Launch/Private/Launch.cpp:182]
libUnrealEditor-UnixCommonStartup.so!CommonUnixMain(int, char**, int (*)(char16_t const*), void (*)()) [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Unix/UnixCommonStartup/Private/UnixCommonStartup.cpp:269]
libc.so.6!UnknownFunction(0x2a1c9)
libc.so.6!__libc_start_main(+0x8a)
UnrealEditor!_start()

Could someone explain why this is happening ? And how to fix/alternatives ?
Ultimately I’m trying to capture the last frame pose of the animation montage and make character “freeze” in it

Also I’m using Unreal Engine Version 5.4.4

Hello there @mrm_dev !

Checking around the community, and investigating through your log, the issue occurs due Animation Montages not being compatible with Sequence Evaluators. The error at line 762 in AnimMontage.h labels this as an unsupported operation.

The Sequence Evaluator node in the AnimGraph is designed to evaluate UAnimSequence assets, yet Montages (UAnimMontage) are not animation sequences, they are composed of multiple sequences themselves. Meaning, we can try to isolated the specific sequence for the clip.

In order to capture and “freeze” the final pose of your montage, please test the following process:

  • Open your montage and note which Animation Sequence it uses
  • Use that Animation Sequence directly in the Sequence Evaluator instead of the montage
  • Set the Explicit Time to the sequence’s duration to get the last frame

Use that Animation Sequence directly in the Sequence Evaluator instead of the montage

I considered this but I was curious if there was any other way since it adds another dependency of also having to set the Anim Sequence everytime I change the montage