Skip to content
Back to wiki

Movement Control Settings

Created: Apr 20, 2025Updated: Nov 03, 2026

Movement Control Settings

GMS_MovementControlSetting allows you to configure movement/rotation settings for multiple different movement states, achieving different speeds and control feelings in various movement states.

Creating Movement Control Settings

You can create a new movement control setting by creating a data asset of type GMS_MovementControlSetting in the editor.

Adding Control Settings to Movement Set Settings

GMS provides a wealth of pre-configured movement control settings. Here, we will use MC_Normal.

note

If you are a heavy user of overlays, you may also want different OverlayMode to influence control. You can add mappings between different OverlayMode and movement control settings in the ControlSettings map. For a specific OverlayMode, if there is no corresponding valid control setting, it will fall back to the default control settings.

Movement State Settings

A movement control setting can contain multiple movement state settings (MovementStateSetting).

For example:MC_Normaldefining common movement states: walk, run, and sprint.

note

A movement control setting requires at least one movement state. Without SpeedToMovementStateCurve, sort MovementStates by Speed from lowest to highest. With a curve, its rounded output is used as an index into the MovementStates array, so the row order must match the curve's intended indices.

MovementStates is GMS's list of semantic tiers such as walk, run, and sprint. A state's Speed is its nominal speed and serves as the backend's default maximum movement speed. The legacy Acceleration and BrakingDeceleration fields are deprecated and are not read; move those values into the matching backend state row.

Backend Execution Settings

Add a backend setting object to the active GMS_MovementControlSetting's BackendSettings array: use UGMS_CharacterMovementBackendSetting for CMC or UGMS_MoverMovementBackendSetting for Mover (the Mover backend is still in development). Backend settings contain state rows aligned with MovementStates; the editor aligns them by state Tag. Configure the actual backend movement parameters in those rows instead of maintaining a second semantic state table.

Speed supplies the backend's default maximum movement speed. Other values override the backend's current values only when their Override switches are enabled; disabled overrides leave existing backend values intact. If the active backend setting or a matching row for the current state is missing, GMS reports an error and skips applying that setting.

For runtime speed changes such as buffs, slows, or AI catch-up, use the movement system's RuntimeSpeedAdjustment (SetRuntimeSpeedAdjustment / ClearRuntimeSpeedAdjustment) instead of duplicating or rewriting MovementStates. See Character Movement System for component setup.

MC_Normal example

The companion project's /Game/GenericGame/MovementSystem/Extras/Mannequin/Movements/MC_Normal defines Walk, Jog, and Sprint with nominal speeds of 150, 375, and 650 cm/s. All three Character backend rows enable Max Acceleration and Braking Deceleration Walking overrides. Max Walk Speed override is disabled, so the states' Speed values are used. Open the asset to compare each override switch with its value.

RuntimeSpeedAdjustment is transient and is not automatically replicated. In multiplayer, apply it through the authoritative gameplay path and mirror it locally when client prediction requires it. ClearRuntimeSpeedAdjustment clears the entire adjustment when the effect ends.

Speed classification

SpeedToMovementStateCurve maps speed to an index in MovementStates; its output is rounded to an integer. CMC actual-state catch-up and AI desired-speed classification use the same rule. Without a curve, the states' Speed values provide the legacy threshold rule. Make sure curve outputs resolve to valid array indices.

Rotation Modes

GMS provides two default rotation modes by default:

  • RotationMode.VelocityDirection: Follows velocity or movement input according to the selected rotation setting. In the default Character policy, bOrientateToMoveInputIntent selects between them.
  • RotationMode.ViewDirection: Generally follows the view according to the selected rotation policy.

Each Movement State's AllowedRotationModes lists its permitted rotation modes. When bRespectAllowedRotationModesSettings is enabled on the component, disallowed requests are restricted and the desired mode is checked when the movement state changes. In the companion project's MC_Normal, Walk and Jog allow both modes, while Sprint allows only VelocityDirection.

GMS provides several rotation policies. Try the settings in the companion project to see how they differ.

For C++ Users

The settings corresponding to different types of rotation modes are implemented using InstancedStruct. In the code, different processing logic is applied based on the specific struct type.
You can follow the same pattern to add new Structs and new rotation handling logic.

Extension

Since movement control settings are data assets, you can also inherit from the default MovementControlSetting to add additional setting fields, and then select your customized movement control settings in the movement set setting.