Animation blueprint has lower tick rate for client characters on server

Hi, I ran into this strange problem:

In server side (not dedicated server but a common standalone) of a networked game, the animation of client’s character is obviously lower than local characters.

This happens on the server app. The local character (server player’s character) has very smooth animation, while client’s character is somehow jittering. I am using a pretty simple configuration of character with common skinned character model and animation blueprint. Almost all the configuration is same as default.

I logged the delta time of animation blueprint of these characters, and the result is local character has a delta time of 16ms and that of client (remote) character is only 33ms. This causes the animation events not triggered for client’s character in server.

I don’t really have a clue on this even after checking other questions or the forums or API. Can anyone help me? Thanks.

I guess this has to do with “replicate movement” option of character class because when I disable that option everything goes fine, but this means the character’s position is not synchronized anymore. Also I found some related C++ code in the engine source but don’t really know how to modify it.

I know this is an old post, but since google leads to this answer quite often I thought it might be useful to answer here.

In CharacterMovementComponent::TickCharacterPose(float DeltaTime), you will see that it manually ticks the pose of the character mesh, based on its own networking updates. In addition, under ACharacter::PossessedBy(AController* NewController), it sets Mesh->bOnlyAllowAutonomousTickPose as true. So the listen server will see the animation bp tick at the same rate as the server tickrate. You will need to edit the engine code to disable this behavior, and I don’t know if it will introduce synchronization issues as I believe that was the point of this feature.