实现代码
void SequenceEventManager::PlayAnimMontage(class USkeletalMeshComponent* InMeshComponent, class UAnimMontage* AnimMontage, float InPlayRate /*= 1.f*/, FName StartSectionName /*= NAME_None*/)
{
if (IsValid(InMeshComponent) && IsValid(AnimMontage))
{
if (UAnimInstance* AnimInstance = InMeshComponent->GetAnimInstance())
{
float const Duration = AnimInstance->Montage_Play(AnimMontage, InPlayRate);
InMeshComponent->TickAnimation(0.f, false);
InMeshComponent->RefreshBoneTransforms();
if (Duration > 0.f)
{
// Start at a given Section.
if (StartSectionName != NAME_None)
{
AnimInstance->Montage_JumpToSection(StartSectionName, AnimMontage);
}
}
}
}
}
动画是Tick驱动的,调用播放动画有概率出现还没走到下一Tick。直接调用一下Tick里面的驱动函数 InMeshComponent->TickAnimation(0.f, false); InMeshComponent->RefreshBoneTransforms();