Skip to content
Back to wiki

Movement Control Settings

A

Author

Author

Created: Apr 20, 2025Updated: Oct 15, 2026

Table of contents

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.

Rotation Modes

GMS provides two default rotation modes by default:

  • RotationMode.VelocityDirection: The character always faces the movement input direction (which could be player input or the direction of a certain velocity).
  • RotationMode.ViewDirection: The character always faces the view direction (i.e., towards ControlRotation).

For different rotation modes, GMS offers multiple implementations. You can switch between different settings in the paired project to observe the differences.

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.