跳转到正文

运动控制设置

作

作者

作者

创建时间: 2025年4月20日更新时间: 2026年10月15日

目录

运动控制设置

GMS_MovementControlSetting一个运动控制设置可以配置多个不同的移动状态下的移动/旋转设置,以此达到不同的运动状态下有不同的速度,操控感等。

创建运动控制设置

你通过在编辑器下创建类型为GMS_MovementControlSetting的数据资产,即可新建新的运动控制设置。

添加运动控制设置到运动集设置

GMS已经提供大量预置的好的运动控制设置,这里我们采用MC_Normal.

Note

如果你是Overlay重度用户,你可能还希望不同的OverlayMode也能对控制产生影响,那么可以在ControlSettings这个map中加入不同OverlayMode和运动控制设置的映射关系。针对某一OverlayMode,如果没有对应的有效控制设置,那么会回退到默认的控制设置。

运动状态设置

一个运动控制设置又可以包含多个运动状态设置(MovementStateSetting),它定义了常规的运动状态,即:走,跑和疾跑。

Note

一个运动控制设置至少需要 1 个运动状态。未设置 `SpeedToMovementStateCurve` 时,MovementStates 按 Speed 从低到高排序;设置曲线时,曲线输出经四舍五入后作为 MovementStates 数组索引,数组顺序必须与曲线索引一致。

MovementStates 是 GMS 用于表达走、跑、冲刺等语义层级的状态列表。每个状态的 Speed 表示名义速度,并作为后端最大移动速度的默认值。旧字段 Acceleration 与 BrakingDeceleration 已弃用且不会被读取,请将这些值迁移到对应后端设置的状态行中。

后端执行设置

在当前 GMS_MovementControlSetting 的 BackendSettings 数组中,添加与活动运动后端匹配的设置对象:CMC 使用 UGMS_CharacterMovementBackendSetting;Mover 使用 UGMS_MoverMovementBackendSetting(Mover 后端目前仍在开发中)。后端设置包含与 MovementStates 对应的状态行,编辑器会按状态 Tag 对齐这些行;在对应行中配置实际由后端执行的移动参数,不要另建一套语义状态表。

Speed 会作为后端最大移动速度的默认值。其他参数只有在对应的 Override 开关启用时才覆盖后端当前值;未启用的覆盖项保留后端已有值。缺少活动后端设置或当前状态对应的后端行时,系统会报告错误并跳过该项应用。

运行时的加速、减速或 AI 追赶等动态速度变化,请使用角色运动系统的 RuntimeSpeedAdjustment(SetRuntimeSpeedAdjustment / ClearRuntimeSpeedAdjustment),不要为临时速度变化复制或改写 MovementStates。组件接入说明见角色运动系统。

旋转模式

GMS默认提供了两种旋转模式,分别是:

  • RotationMode.VelocityDirection:角色永远朝向移动输入方向,(可能是玩家输入,也可以是某个速率的方向)。
  • RotationMode.ViewDirection:角色永远朝向视角的方向,(即朝向ControlRotation)。

不同的旋转模式,GMS提供了多种实现,你可以在配套项目中切换不同的设置来观察其中的区别。

For C++ Users

不同类型的旋转模式对应的设置由InstancedStruct实现,在代码中,根据不同的结构体类型,进行不同的处理。

你可以依样画葫芦,添加新的Struct以及新的旋转处理逻辑。

拓展

鉴于运动控制设置是数据资产,你也可以通过继承自默认的MovementControlSetting来添加额外的设置字段,并在运动集设置中,选择你自定义后的运动控制设置。