Via Blueprint:
Create a Blueprint struct to hold a montage and its relevant info (Play rate, section etc).
Add this as a variable to your character that replicates via a rep notify.
On the client, make sure the rep notifier for the variable plays the montage using the replicated information.
On the server, ensure you fill in this replicated montage variable when you play an animation and call ForceNetUpdate.
After that, any delay in the animation playing will be caused by the latency between server & client.
This is all we have done in GB for server-to-client replication of general animations, though its a C++ version.
We include the time the animation started, so if the animation will jump forward to the appropriate time.
This is good for when an animation begins playing without network relevance.
Without this ‘catch up’, as soon as the character becomes relevant, the animation would play from start to finish, regardless of when it actually began.
Changed to your method and it’s working really well now. Thanks!
One more question though, how do you jump forward the animation? Montage play does not have a parameter to specify animation start time.