bool USkeletalMeshComponent::ShouldTickPose() const { // Characters playing Root Motion will tick pose themselves before physics. ACharacter * CharacterOwner = Cast<ACharacter>(GetOwner()); const bool bSkipBecauseOfRootMotion = CharacterOwner && CharacterOwner->IsPlayingRootMotion(); // When we stop root motion we go back to ticking after CharacterMovement. Unfortunately that means that we could tick twice that frame. // So only enforce a single tick per frame. const bool bAlreadyTickedThisFrame = (LastTickTime == GetWorld()->TimeSeconds); // Remote Clients on the Server will always tick animations as updates from the client comes in. To use Client's delta time. const bool bRemoteClientOnServer = CharacterOwner && (CharacterOwner->Role == ROLE_Authority) && CharacterOwner->Controller && !CharacterOwner->Controller->IsLocalController(); return (Super::ShouldTickPose() && IsRegistered() && AnimScriptInstance && !bPauseAnims && GetWorld()->HasBegunPlay() && !bNoSkeletonUpdate && !bSkipBecauseOfRootMotion && !bRemoteClientOnServer && !bAlreadyTickedThisFrame); }