GMS 1.5发布日志

本节记录通用运动系统(GMS)1.5 版本的更新内容,包括新增功能、改进、配套项目调整、引擎版本支持以及更新指南。

Cover.GMS
罗传月武(YueWu)

作者

罗传月武(YueWu)

专注游戏开发和Web技术。

创建时间: 2025年7月31日更新时间: 2026年9月15日

目录

GMS1.5版本

本节记录通用运动系统(GMS)1.5 版本的更新内容,包括新增功能、改进、配套项目调整、引擎版本支持以及更新指南。

升级警告

本次更新涉及一定程度的重构,部分系统更改了数据配置形式,尽管GMS提供了迁移方式,但升级前一定要备份自己的项目,自动化迁移的结果并不能100%保证准确,所以在自动化迁移后,也请检查一遍动画最终效果。

针对C++用户

为避免数据丢失,弃用字段并没有移除,编译打包项目时会产生警告,但不影响打包。弃用内容会在1.6版本完全移除。

最小引擎支持

我自己的项目已经升级到5.6,因此,GMS目前最小支持版本是5.6。尽管你可以在旧版本编译GMS,但GMS的配套项目已经在5.6引擎中保存过,因此无法提供向后兼容。

动画叠加系统

起源

我一直觉得ALS的Layering系统可以更加地灵活通用,为此我在GMS中尝试改进ALS地Layering系统的用法,并称之为基于姿势的叠层系统,同时我还新增了基于栈的动画叠层系统。

但是这两个系统仍然有各自的优缺点:

姿势叠层:虽然可以利用类似ALS的Layering效果,效果好,但是我默认只提供了简单的移动和非移动情况下的姿势(项目仍需要自定义),并通过Tags动态选择Overlay姿势。它无法仅在某些动画状态激活时,才应用某个Overlay姿势;同时也不能同时混合多个姿势,即某些姿势应用在左手,某些姿势应用在右手;由于ALS是单帧混合,单帧Pose的曲线基本上只有Overlay姿势变了,才会变,但是不断地通过曲线去获取各个身体部位的曲线混合值,很浪费。

栈姿势:栈姿势可以在某些动画状态激活时,也可以并行用多个动画与身体的不同部位进行混合。但由于传统的上下半身混合,其效果确实不如单帧Pose按曲线权重混合身体部位的效果好。

很显然,GMS应该结合两者优势,提供更好的解决方案。

姿势栈动画叠加系统

PoseBasedOverlay已经更名为PoseStack并进行了重构,并新增了ParallelPoseStack。

姿势栈叠层系统了解更多。

迁移

右键选中你的运动定义->ScriptedAssetActions->GMS|Migration->MigratePoseBasedOverlayToPoseStack。

它会将原本的配置格式转换成新的配置格式(包括将Layering曲线的值设置到新的配置中),并清空原有字段数据。

序列栈动画叠加系统

StackBasedOverlay已经更名为ParallelSequenceStack,并新增了SequenceStack。

序列栈叠层系统了解更多。

迁移

如果你没有并行在多个身体部位播放不同动画序列的需求,那么建议将ParallelSequenceStack转换未SequenceStack。

右键选中你的运动定义->ScriptedAssetActions->GMS|Migration->ConvertParallelSequenceStackToSequenceStack。

控制设置变动

在运动控制设置中(MovementControlSetting),改进了旋转系统的配置方式,引入了多态的ViewDirectionSetting和VelocityDirectionSetting,并将MovementState中的旋转相关的参数迁移到了DirectionSetting中。

使用多态的InstancedStrcut来表示不同的旋转控制方式,而不是通过庞大的结构体+枚举来进行区区分。这一改动使得旋转部分的代码设计更加模块化,也方便后续添加更多类型的控制逻辑。

迁移

为避免数据丢失,原有字段已经隐藏且不可编辑,在新的旋转设置字段为空的情况下,重新保存MovementControlSetting会将旧格式迁移到新的旋转设置中。

API变动

MovementSystemComponent组件上的MovmentDefinitions数组已经移除,它带来了无意义的复杂度。

作为用户你只需要关心如何设置组件的当前定义(通过SetMovementDefinition),而无需再考虑组件的定义列表是否拥有该定义。

同时你也可以在外部借由更灵活的系统(如Chooser或基于Tags)动态地选择要使用哪一个MovementDefinition。

基础Locomotion改进

  1. 修正跳跃下落动画没有正确播放。
  2. Start细节调整。
  3. 支持BasedMovement。
  4. Start支持开关动态播放率调整。

SkeletalControl动画层改进

默认骨骼控制层,允许根据Tags变化来动态地开启/关闭 手部IK。

比如某些运动集,在VelcotiyDirection下不需要开启手部IK,但在ViewDirection下,由于ViewLayer可能用到AO(因此会影响手部位置),那么需要开启IK。

那么你可以设置:当角色有RotationMode.VelocityDirection时,就关闭手部IK。

配套项目

配套项目的所有内容,包括Demo部分的关卡全部进行了更新,确保与文档,和最新代码一致。

因此,只有你额外自己创建的运动定义需要进行数据迁移。

Mover支持

仍然处于实验阶段,由于MoverComponent不具备类似CMC那样的Acceleration,因此在基础运动中,Pivot动画不会触发。我会在后续版本中进一步迭代。