Skip to content

Networking model

Motion uses Unreal Engine networking and GAS replication. The server owns movement state, and local controls stay responsive.

Prerequisites

This explanation assumes that you know the basic Unreal Engine gameplay framework and replication model. If GAS is new to you, read GAS concepts in Motion first.

Core model

Motion uses the standard server-client model:

  • The server owns gameplay state.
  • The owning client predicts local input for responsiveness.
  • GAS replicates configured attributes, tags, and GameplayEffect details for the applicable ASC replication mode.
  • Visual-only camera and sound feedback stays local.

PlayerState and ASC ownership

A Motion-specific PlayerState class is not necessary for Motion 2.0. In the recommended networked setup, your PlayerState owns the ASC and exposes it through IAbilitySystemInterface. Motion also supports the documented component lookup fallbacks.

The PlayerState ownership pattern keeps the ASC stable across possession and respawn:

Motion components find the ASC through standard Unreal interfaces and lookup paths. The supported Motion 2.0 path must have a resolvable ASC. It must also have the Motion attributes and GameplayEffects that each enabled component uses. Walk must have the WalkSpeed attribute. Walk does not use a second CharacterMovement-only architecture when GAS is not available.

Replicated state

Motion relies on three replication channels:

StateOwnerReplication path
Character transform and velocityCharacterMovementComponentUnreal movement replication
Movement attributesAbilitySystemComponent / AttributeSetGAS attribute replication
Authoritative walking, sprinting, crouching, and jumping tagsGameplayEffectsGAS tag and effect replication

ASC replication mode controls active-effect detail. Full sends active GameplayEffects to every client. Mixed sends them only to the owning client. Minimal sends no active GameplayEffects. GameplayTags and GameplayCues replicate in each mode. AttributeSet properties replicate as specified by their property configuration.

Camera curves, movement sounds, UI state, and first-person presentation are local feedback. Do not replicate them as server-owned gameplay state.

Client prediction

For immediate input response, the owning client records sprint intent before server confirmation. Server-applied GameplayEffects then establish the active sprint state and speed.

Loose tags can represent predicted intent or local presentation state, such as item hold state or breathing feedback. They are not authoritative replicated state. Server-applied GameplayEffects must grant replicated movement state.

Movement components

Sprint

Sprint predicts Motion.State.WantsToSprint intent locally. Then, the server validates active sprint speed, the Motion.State.Sprinting tag, and sprint camera feedback. Compare stamina with the replicated GAS attribute. GameplayEffects must grant authoritative sprint tags.

Crouch

Crouch wraps the native Unreal crouch path. The CharacterMovementComponent handles capsule replication and prediction, while Motion coordinates tags, speed effects, and camera height events.

Jump

Jump combines server validation with local feedback. Motion tracks its own jump count for coyote time, buffering, and multi-jump features, while the server accepts or rejects jumps.

Design rules

  • Apply GameplayEffects on the server.
  • Use PlayerState ASC ownership or an equivalent stable ASC source.
  • Keep camera, sound, and first-person presentation local.
  • Use Motion helpers for ASC and tag lookup instead of duplicating discovery logic.
  • Treat loose tags as predicted or locally derived state, never replicated truth.

Next steps

Move from the model to concrete test and lookup pages.

Motion - Advanced First Person Character Controller