void FMovieSceneSkeletalAnimationTrackInstance::FinishAnimControl(USkeletalMeshComponent* SkeletalMeshComponent) { if(SkeletalMeshComponent->GetAnimationMode() == EAnimationMode::Type::AnimationBlueprint) { UAnimInstance* AnimInstance = SkeletalMeshComponent->GetAnimInstance(); if(AnimInstance) { AnimInstance->Montage_Stop(0.f); AnimInstance->UpdateAnimation(0.f, false); } // Update space bases to reset it back to ref pose SkeletalMeshComponent->RefreshBoneTransforms(); SkeletalMeshComponent->RefreshSlaveComponents(); SkeletalMeshComponent->UpdateComponentToWorld(); } CurrentlyPlayingMontage = nullptr; }
void FMovieSceneSkeletalAnimationTrackInstance::PreviewFinishAnimControl(USkeletalMeshComponent* SkeletalMeshComponent) { if (CanPlayAnimation(SkeletalMeshComponent)) { // if in editor, reset the Animations, makes easier for artist to see them visually and align them // in game, we keep the last pose that matinee kept. If you'd like it to have animation, you'll need to have AnimTree or AnimGraph to handle correctly if (SkeletalMeshComponent->GetAnimationMode() == EAnimationMode::Type::AnimationBlueprint) { UAnimInstance* AnimInstance = SkeletalMeshComponent->GetAnimInstance(); if(AnimInstance) { AnimInstance->Montage_Stop(0.f); AnimInstance->UpdateAnimation(0.f, false); } } // Update space bases to reset it back to ref pose SkeletalMeshComponent->RefreshBoneTransforms(); SkeletalMeshComponent->RefreshSlaveComponents(); SkeletalMeshComponent->UpdateComponentToWorld(); } CurrentlyPlayingMontage = nullptr; }