Hi!
I’m doing some pre-production research for a multiplayer game using Mover and Motion Matching for locomotion. Most of my previous experience has been in single-player gameplay/animation systems, and this is also my first project using Mover, so I’m trying to make sure we choose the right architecture early.
The game is relatively small in terms of character count: around 6–7 players + 1–2 AI NPCs in a dedicated server session.
I’m trying to understand the recommended approach for high-accuracy animation-driven movement, such as:
- traversal / mantles / vaults
- vent interactions / smart navlink-style transitions
- synced or semi-synced interactions
- other committed movement actions that would traditionally use root motion montages + Motion Warping
My initial idea was:
- clients run the full Motion Matching / procedural adjustments / layering, etc… ABP
- the server uses a much simpler animation setup: ABP would only keep the montage slots needed for animation-driven moves
- committed moves would use Mover root-motion layered moves / montage-based movement on the server.
However, I’m unsure whether, for performance reasons, we should try to completely skip animation evaluation on the dedicated server. Right now, some gameplay flow inside Gameplay Abilities relies on montage events such as Montage End, Blend Out, Interrupted… If we completely skip server animation, I assume we would need to refactor that gameplay flow so it is driven by gameplay state/timing data instead of montage events.
So my main question is:
For a game with a relatively low character count, is it reasonable to keep a minimal server animation setup with montage slots so montage/root-motion-driven gameplay flow can still work, or is the intended/robust approach to avoid server animation dependency entirely? I may be overthinking this given the small number of characters, but I would like to understand what Epic or other teams using Mover would recommend.
I’m also trying to understand the expected synchronization model for local prediction.
For example, suppose the local client presses Interact:
- the client wants to play the montage immediately for responsiveness;
- the client asks the server to validate/start the interaction;
- the server starts the authoritative Mover root-motion layered move;
- the server replicates the interaction state back to the owning client and simulated proxies.
If the owning client only plays the montage locally without movement, the visual animation and the authoritative root-motion movement can be desynced for a few frames. With higher latency this may become visible. What is the usual way to handle this with Mover?
- Should the owning client also start a predicted Mover root-motion layered move locally, then reconcile when the server confirms?
- Should the owning client only play an anticipation section locally and wait for the server before applying movement?
- Should clients set or smooth the montage position based on the server start time of the layered move?
- For simulated proxies, is the expected approach to start the montage at the replicated server phase rather than from the beginning?
I would appreciate any guidance on the intended pattern for these cases
Thanks!
[Attachment Removed]