I understand that this is not something you're intended to be able to do (Montages aren't used this way), but we should bar the user from inserting a montage into this variable slot.
Crash occurs when you attempt to enter a Montage into Sequence field of a Play Node details panel inside of the AnimGraph.
Error message:
LowLevelFatalError [Link Removed] [Line: 138] Pure virtual not implemented (UAnimSequenceBase::GetAnimationPose)
Source Context:
123 // this is used in editor only when used for transition getter 124 // this doesn't mean max time. In Sequence, this is SequenceLength, 125 // but for BlendSpace CurrentTime is normalized [0,1], so this is 1 126 virtual float GetMaxCurrentTime() override { return SequenceLength; } 127 //~ End UAnimationAsset Interface 128 129 /** 130 * Get Bone Transform of the Time given, relative to Parent for all RequiredBones 131 * This returns different transform based on additive or not. Or what kind of additive. 132 * 133 * @paramOutPosePose object to fill 134 * @paramOutCurveCurves to fill 135 * @paramExtractionContextExtraction Context (position, looping, root motion, etc.) 136 */ 137 ***** ENGINE_API virtual void GetAnimationPose(struct FCompactPose& OutPose, FBlendedCurve& OutCurve, const FAnimExtractContext& ExtractionContext) const PURE_VIRTUAL(UAnimSequenceBase::GetAnimationPose, ); 138 139 DEPRECATED(4.11, "This function is deprecated, please use HandleAssetPlayerTickedInternal") 140 virtual void OnAssetPlayerTickedInternal(FAnimAssetTickContext &Context, const float PreviousTime, const float MoveDelta, const FAnimTickRecord &Instance, class UAnimInstance* InAnimInstance) const; 141 142 virtual void HandleAssetPlayerTickedInternal(FAnimAssetTickContext &Context, const float PreviousTime, const float MoveDelta, const FAnimTickRecord &Instance, struct FAnimNotifyQueue& NotifyQueue) const; 143 144 virtual bool HasRootMotion() const { return false; } 145 146 virtual void Serialize(FArchive& Ar) override; 147 148 virtual void AdvanceMarkerPhaseAsLeader(bool bLooping, float MoveDelta, const TArray<FName>& ValidMarkerNames, float& CurrentTime, FMarkerPair& PrevMarker, FMarkerPair& NextMarker, TArray<FPassedMarker>& MarkersPassed) const { check(false); /*Should never call this (either missing override or calling on unsupported asset */ } 149 virtual void AdvanceMarkerPhaseAsFollower(const FMarkerTickContext& Context, float DeltaRemaining, bool bLooping, float& CurrentTime, FMarkerPair& PreviousMarker, FMarkerPair& NextMarker) const { check(false); /*Should never call this (either missing override or calling on unsupported asset */ } 150 virtual void GetMarkerIndicesForTime(float CurrentTime, bool bLooping, const TArray<FName>& ValidMarkerNames, FMarkerPair& OutPrevMarker, FMarkerPair& OutNextMarker) const { check(false); /*Should never call this (either missing override or calling on unsupported asset */ } 151 virtual FMarkerSyncAnimPosition GetMarkerSyncPositionfromMarkerIndicies(int32 PrevMarker, int32 NextMarker, float CurrentTime) const { check(false); return FMarkerSyncAnimPosition(); /*Should never call this (either missing override or calling on unsupported asset */ } 152 virtual void GetMarkerIndicesForPosition(const FMarkerSyncAnimPosition& SyncPosition, bool bLooping, FMarkerPair& OutPrevMarker, FMarkerPair& OutNextMarker, float& CurrentTime) const { check(false); /*Should never call this (either missing override or calling on unsupported asset */ }
Most recent user affected CL: 2834065 (4.12)
Logs:
[Link Removed]
1. Create a Third Person Template project
2. Create an AnimMontage based off of the Mannequin Skeleton
3. Drop an AnimSequence into the Montage
4. Save
5. Open ThirdPerson_AnimBP
6. Right Click in the Anim Graph and add Play node for the idle animation
7. Under the details panel for the Play Node, select the dropdown for "Sequence"
8. Select the AnimMontage you created earlier
9. Plug the Play node into the Final Animation Pose
10. Compile
Result: Crash
Expected: Editor doesn't allow me to enter a Montage as the Sequence variable in a Play node
UE4Editor_Engine!UAnimSequenceBase::GetAnimationPose() animsequencebase.h:138 UE4Editor_Engine!FAnimNode_SequencePlayer::Evaluate() animnode_sequenceplayer.cpp:52 UE4Editor_Engine!FPoseLink::Evaluate() animnodebase.cpp:235 UE4Editor_Engine!FAnimInstanceProxy::EvaluateAnimation() animinstanceproxy.cpp:645 UE4Editor_Engine!UAnimInstance::ParallelEvaluateAnimation() animinstance.cpp:518 UE4Editor_Engine!USkeletalMeshComponent::EvaluateAnimation() skeletalmeshcomponent.cpp:1029 UE4Editor_Engine!USkeletalMeshComponent::PerformAnimationEvaluation() skeletalmeshcomponent.cpp:1082 UE4Editor_Engine!USkeletalMeshComponent::RefreshBoneTransforms() skeletalmeshcomponent.cpp:1239 UE4Editor_Engine!USkeletalMeshComponent::InitAnim() skeletalmeshcomponent.cpp:379 UE4Editor_UnrealEd!FBlueprintCompileReinstancer::ReplaceInstancesOfClass_Inner() kismetreinstanceutilities.cpp:1411 UE4Editor_UnrealEd!FBlueprintCompileReinstancer::ReplaceInstancesOfClass() kismetreinstanceutilities.cpp:1190 UE4Editor_UnrealEd!FBlueprintCompileReinstancer::ReinstanceInner() kismetreinstanceutilities.cpp:553 UE4Editor_UnrealEd!FBlueprintCompileReinstancer::ReinstanceObjects() kismetreinstanceutilities.cpp:666 UE4Editor_UnrealEd!FKismetEditorUtilities::CompileBlueprint() kismet2.cpp:796 UE4Editor_Kismet!FBlueprintEditor::Compile() blueprinteditor.cpp:3209 UE4Editor_Persona!FPersona::Compile() persona.cpp:1718 UE4Editor_Kismet!TBaseSPMethodDelegateInstance<0,FBlueprintEditor,0,TTypeWrapper<void> __cdecl() delegateinstancesimpl_variadics.inl:321 UE4Editor_Kismet!TBaseSPMethodDelegateInstance<0,FBlueprintEditor,0,void __cdecl() delegateinstancesimpl_variadics.inl:428 UE4Editor_Slate!FUICommandList::ExecuteAction() uicommandlist.cpp:87 UE4Editor_Slate!SToolBarButtonBlock::OnClicked() stoolbarbuttonblock.cpp:300 UE4Editor_Slate!TMemberFunctionCaller<SToolBarButtonBlock,FReply() delegateinstanceinterface_variadics.h:161 UE4Editor_Slate!TTupleImpl<TIntegerSequence<unsigned int> >::ApplyAfter_ExplicitReturnType<FReply,TMemberFunctionCaller<SToolBarButtonBlock,FReply() tuple.h:128 UE4Editor_Slate!TBaseSPMethodDelegateInstance<0,SToolBarButtonBlock,0,FReply __cdecl() delegateinstancesimpl_variadics.inl:321 UE4Editor_Slate!TBaseDelegate<FReply>::Execute() delegatesignatureimpl_variadics.inl:521 UE4Editor_Slate!SButton::OnMouseButtonUp() sbutton.cpp:273 UE4Editor_Slate!<lambda_ec8ed861298bf5f48555d4b39e4a0d00>::operator() slateapplication.cpp:4509 UE4Editor_Slate!FEventRouter::Route<FReply,FEventRouter::FToLeafmostPolicy,FPointerEvent,<lambda_ec8ed861298bf5f48555d4b39e4a0d00> >() slateapplication.cpp:214 UE4Editor_Slate!FSlateApplication::RoutePointerUpEvent() slateapplication.cpp:4512 UE4Editor_Slate!FSlateApplication::ProcessMouseButtonUpEvent() slateapplication.cpp:4916 UE4Editor_Slate!FSlateApplication::OnMouseUp() slateapplication.cpp:4892 UE4Editor_Core!FWindowsApplication::ProcessDeferredMessage() windowsapplication.cpp:1430 UE4Editor_Core!FWindowsApplication::DeferMessage() windowsapplication.cpp:1735 UE4Editor_Core!FWindowsApplication::ProcessMessage() windowsapplication.cpp:719 UE4Editor_Core!FWindowsApplication::AppWndProc() windowsapplication.cpp:641 user32!<Unknown> user32!<Unknown> UE4Editor_Core!FWindowsPlatformMisc::PumpMessages() windowsplatformmisc.cpp:884 UE4Editor!FEngineLoop::Tick() launchengineloop.cpp:2617 UE4Editor!GuardedMain() launch.cpp:142 UE4Editor!GuardedMainWrapper() launchwindows.cpp:126 UE4Editor!WinMain() launchwindows.cpp:200
Head over to the existing Questions & Answers thread and let us know what's up.