Root motion and network replication


We’re currently working on a networked game. And we’re having an issue with our characters not playing the correct animation when they are falling in the world ON THE CLIENT

Currently when our character is falling, we detect this by the IsFalling function in the character movement component and then set its animation state machine accordingly based on this value. This works on the server.
But ON CLIENT, the IsFalling function is always returning FALSE. We found out that the reason why this is is because we have its animation blueprint set to ‘Root Motion from Everything’ and the character movement component thinks there is root motion and thus returns false all the time.

After reading Epic’s documentation, it says that if we wanted characters to use root-motion in multiplayer, we should set our animation blueprints to ‘Root Motion from Montage Only’. We tested this and doing this DOES fix the problem.

With that in mind, we have two questions:

  1. Why does the character movement component return FALSE all the time on client when set to ‘Root Motion from Everything’? Our characters are set to replicate; and as we understand it, when this is so, all the character’s components are replicated with it. If that is the case, doesn’t that mean that when the character falls on client the result is calculated locally on that machine?

  2. What would be your suggested workflow if we WOULD LIKE to use state machines to drive our character’s animations - just because we think it’s more readable and easier to follow - BUT it needs to support BOTH root motion (i.e ‘Root Motion from Montage Only’’ is selected) AND work in multiplayer? Should we create animation slots to inject montage animations in each state that will have root motion?


Root Motion is not supported in Multiplayer (Sadly) So you have to figure out how to fake it.