Get the Length of a Section in AnimMontage

ue4-archive
Tue, 11 Mar 2014 02:41:39 +0000
Character & Animation

I have this code to play an AnimMontage or a particular section of it:

float MyClass::PlayAnimMontage(class UAnimMontage* AnimMontage, float InPlayRate, FName StartSectionName)
{
	USkeletalMeshComponent* UseMesh = GetPawnMesh();

	if (AnimMontage && UseMesh && UseMesh->AnimScriptInstance)
	{
		float Duration = 0.f;

		// If the Montage is not playing it must be started
		if( !UseMesh->AnimScriptInstance->Montage_IsActive(AnimMontage) )
		{
			Duration = UseMesh->AnimScriptInstance->Montage_Play(AnimMontage, InPlayRate);
		}

		// After it has been started (if required) in case a Section has been explicited it is played
		if( StartSectionName != NAME_None )
		{
			// Jump to the specified section of the montage
			UseMesh->AnimScriptInstance->Montage_JumpToSection(StartSectionName);
		}

		return Duration;
	}

	return -1.f;
}

I’m not sure this is the correct use of sections but, if it is, I need to get the duration of a specific section. In the way above it always give me the Duration of the whole AnimMontage.
Is there a way or I am doing something that shouldn’t be done?

Another way to solve my problem is by using BranchPoints or AnimNotifies but at this point I don’t know how to catch a notify directly from code instead than from a blueprint how is shown in the AnimMontage online docs.

5 posts - 2 participants