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改进
- 修正跳跃下落动画没有正确播放。
- Start细节调整。
- 支持BasedMovement。
- Start支持开关动态播放率调整。
SkeletalControl动画层改进
默认骨骼控制层,允许根据Tags变化来动态地开启/关闭 手部IK。
比如某些运动集,在VelcotiyDirection下不需要开启手部IK,但在ViewDirection下,由于ViewLayer可能用到AO(因此会影响手部位置),那么需要开启IK。
那么你可以设置:当角色有RotationMode.VelocityDirection时,就关闭手部IK。
配套项目
配套项目的所有内容,包括Demo部分的关卡全部进行了更新,确保与文档,和最新代码一致。
因此,只有你额外自己创建的运动定义需要进行数据迁移。
Mover支持
仍然处于实验阶段,由于MoverComponent不具备类似CMC那样的Acceleration,因此在基础运动中,Pivot动画不会触发。我会在后续版本中进一步迭代。
