GMS1.3版本变更日志
这一版本是针对UE5.4的最后一次更新,在此之后,我会将我的工作移动到UE5.5,并按照开发计划进行后续的开发内容。
主要变化
整体改进默认Locomotion实现的表现效果,尤其是起步转身。并调整状态机结构。
各种细节上的bug修正,以及开发使用体验上的改进。
Bug修正
修正:修正PivotMovement在联机下没有正常同步的Bug,以及斜方向的Pivot没有正常触发。
修正:在不同的旋转模式下,配置了不同长度的Start/Stop动画时,如果在播放这些动画的过程中切换旋转模式,会触发引擎中关于同步组标记的断言,会让游戏卡一下。这个已经修复。
修正:当旋转模式为ViewDirection时,Start动画没有播放。
修正:改进默认Locomotion的状态机结构,和跳转逻辑,使其更稳健。
修正:VelcoityDirection下勾选运动被阻挡时采用InputDirection的选项未生效。
修正:着地动画基于错误的落地速度进行选择。
运动控制系统改进
改进:开启运动系统组件上的OwnedTags的网络同步,并提供API对其进行增/删/覆盖。这允许不使用GAS的项目,也能更容易的进行Tags的网络同步。
修正:跳跃采用GAS制作,确保跳跃和蹲下互斥。
改进:改进运动被阻挡的判定逻辑。
改进:StrideWarping从AnimGraphSetting移动到每个运动集设置中,可以单独配置Start/Pivot的步幅适配参数,并选择是否启用。
案例Demo改进
Demo体验更新:从这次更新开始,我提供的演示关卡,都采用与ContentExample类似的房间式案例演示,并在我的不同产品中进行了统一,你甚至也可以利用那几个简单的蓝图,快速搭建关卡原型或者类似功能演示地图。
GGS整合:GGS是免费的且是GMS的一部分,这次提供了交互示例和UI示例,仅用于Demo。GMS的核心始终是“一个运动系统组件”+“一个主动画蓝图”。
动画整合改进
修正:1.2版本的更新中,枪械类武器的参考设置缺失了瞄准时的配置,所以导致IK/瞄准产生了问题。这次已经补上。Lyra的枪械类动画(手枪/来福枪/散弹枪)已经全部配置好,可以直接使用或者作为参考案例学习。
新增:我已经重定向了GASP5.4中的基础运动动画,并配置好了运动定义,你现在可以在Lyra的Unarmed和GASP的Unarmed当中自由组合/切换。
开发体验
改进:AM_FootFX动画修改器已经可以可选地自动放置SyncMarkers(默认启用),比引擎自带的SyncMarkers修改器更准确,所以你不需要再额外添加SycnMarkers修改器。
配置注释/文档:在关键字段上添加更多中英注释,并提供用法介绍,或者指向官方文档的链接,对基础较为薄弱的用户更加友好。
让一些API公开化,并让更多API蓝图可重写。
Addtive层改进
暴露更多配置到运动集设置,并允许根据移动与否配置LandRecovery的权重。
转身系统
将转身系统的复杂度从控制部分转移到了动画部分,引入了在GASP中介绍的OffsetRoneBone和Steering节点,并将其用于GMS的默认Locomotion的起步转身效果。
该系统依赖具备根运动的起步/转身动画,虽然有更好地表现效果,但是操控手感会更粘滞。因此可以可选关闭(在运动集设置的GeneralSetting中),这给予GMS在高响应和高保真之间进行选择的灵活度。
此系统同时允许:在VelocityDirection下,摇杆轻弹/Tap方向键也可以可选地触发原地转身动画(类似龙腾世纪)。
不再区分Montage/Graph方式的原地转身,会根据控制设置以及延迟激活设置,自动选择延迟/非延迟的原地转身。
你也可以在转身配置中选择是否在瞄准时启用(一些用户希望ADS时有及时反应,而不是等待转身动画。)
倾斜系统调整
现在Lean可以配置“移动速度范围到混合空间值的缩放范围”映射,允许你根据速度的快慢从而应用不同的倾斜程度。
StackOverlay系统
每一个AnimData_Overlay允许你配置混入和混出时间,之前混入混出都采用同一个时间,但是在某些情况下,你希望快速混入,并缓慢混出。
修正了逻辑上的错误,当一个Overlay不再激活时,不会重置其数据,只是令其无效,这样不会触发动画上的跳变。
将相关性的更新提取到NativeThreadSafeUpdate以进一步提高性能。
迁移指南
升级前请备份你的项目先。
Tags迁移:由于更改了默认Locomotion的结构,一些状态机对应的GameplayTags进行了重定向,如果你的项目使用了这些Tags去配置叠层,那么你需要在你项目的Config/DefaultGameplayTags.ini加上如下迁移(Demo项目已经配置好可以复制粘贴)。
1[/Script/GameplayTags.GameplayTagsSettings]2+GameplayTagRedirects=(OldTagName="GMS.SM.Locomotion",NewTagName="GMS.SM.Grounded")3+GameplayTagRedirects=(OldTagName="GMS.SM.Locomotion.Grounded",NewTagName="GMS.SM.Grounded")4+GameplayTagRedirects=(OldTagName="GMS.SM.Locomotion.Jump",NewTagName="GMS.SM.InAir.Jump")5+GameplayTagRedirects=(OldTagName="GMS.SM.Locomotion.Fall",NewTagName="GMS.SM.InAir.Fall")6+GameplayTagRedirects=(OldTagName="GMS.SM.Locomotion.Land",NewTagName="GMS.SM.Grounded.Land")
内容文件迁移:由于更改了个别文件路径,如果你使用到这些文件,你需要配置Packages重定向,以免蓝图引用被破坏。(个别非关键文件如果你找不到了,重新引用新路径即可。)
1[CoreRedirects]2;GMS 1.3 Upgrade.3+ClassRedirects=(OldName="BC_GMS_MovementSystem_C",NewName="/Script/GenericMovementSystem.GMS_CharacterMovementSystemComponent",OverrideClassName="/Script/CoreUObject.Class")
GMS1.2版本变更日志
- 简化了运动集管理。在此版本中,您可以动态添加运动定义来覆盖不同的动作集设置,而无需跟踪不同的动作集标签,标签数量可减少为 “MovementSet.Default/ADS/Crouch/ADS_Crouch”。其他类型的移动设置可以是 “MovementSet.Guard/Guard/Crouched”。
- 改进摄像机系统。移除 BC_Lite_CameraManager,并被功能更强大的通用相机系统给替代了。
- 运动集用户设置。添加了为运动集设置添加自定义数据的功能,因此用户在自定义动画层时可以轻松访问自定义数据。
- 小 bug 修复。
- 移除9CG的动画整合。
- 更多中英文的代码注释。
- 动画层设置改进。States和Overlay动画层设置现在可以通过数据资产单独创建,并在不同的运动集设置中引用同一个动画层设置,以达到复用。
迁移指南
此版本有文件夹结构性改动。为了避免资源引用被破坏,你需要在你项目的DefaultGame.ini
中添加如下的重定向以将移动过的文件夹定位到新的位置。
1[CoreRedirects]2;GMS 1.2 Upgrade.3+PackageRedirects=(OldName="/Game/GenericGame/MovementSystem/Demo",NewName="/Game/GenericDemo/GMS",MatchSubstring=true)4+PackageRedirects=(OldName="/Game/GenericGame/MovementSystem/Intergration",NewName="/Game/GenericGame/MovementSystem/Integration",MatchSubstring=true)
将Demo文件移动到它专属的文件夹后,可以让未来的更新变得更容易。迁移的时候你只需要迁移GenericGame
文件夹,而将GenericDemo
仅作为参考。如果你觉得Demo演示内容也能用,那么也可以迁移,但它终会在下次更新时被覆盖。
GMS1.1版本变更日志
1.默认Locomotion(Grounded和Inair)已经作为一个单独的状态动画层ABPT_GMS_Layer_States_Default实现,并完全与MainAnimInstance隔离开,这允许你直接通过切换不同的运动集从而替换不同的Locomotion实现(比如进入SwimmingMode的时候,切换运动集为MovementSet.Mannequin.Unarmed.Swimming)
2.现在GMS_MainAnimInstance提供了一些函数,允许其他任意AnimInstance注册 “动画状态节点-游戏性标签”的映射,这样一来可以通过简单的Tag匹配得知各个动画图表的节点激活与否,在配置动画Overlay时,提供了极大的灵活性。当你自己需要拓展基于Tags进行动画选择时也会更加方便。
3.默认Locomotion的资产配置上由AnimSequenceBase更改为AnimSequence,以防止意外选择不受支持的动画资产类型。同时默认Locomotion以前必须配置Jump和Land,现在可以只配置Jump或者Land,没有对应动画则不会启用对应状态。
4.所有的AnimLayerSetting提供了一个IsDataValid的蓝图可重写函数,这样进行自定义开发的用户可以有机会仅通过蓝图实现数据合法性的校验。
5.Demo角色的基础控制(Walk/Run,Sprint,Crouch)完全使用纯蓝图GAS实现,使得整个角色图表变得更加简洁清晰,并提供了一个简易版的Ability管理器帮助你更好的管理技能与输入之间的映射。
6.Demo角色之前没有相机控制逻辑,现在添加了一个简易版的相机管理器,你可以根据角色的不同状态,切换不同的相机模式,它会自动完成相机混合以及过渡。
7.Demo角色的组件层级极大简化,并添加了一个简易的ObjectAttacher组件,这主要方便我自己开发,同时作为组件存在,不污染角色主要逻辑。
实验性MotionMatching支持
得益于这次更新,使得自定义/替换默认Locomotion实现变得非常容易。现在我已经将MotionMatching(Game Animation Sample Project)作为一个动画层(ABPT_GMS_Layer_States_MM)集成到了GMS。
这意味着你可以在项目中混用传统状态机以及MotionMatching,并使用同一套API进行控制,且支持多人联机。
此部分属于实验性更新,还没有达到完美的程度,它的一些做法和实现方式会在正式公开时得到改进。目前Travel动画在网络同步中会有问题。 所以此更新仅适用于GMS用户尝鲜。
GES1.1版本变更日志(GES是GMS的一部分)
之前GES只支持播放Attached的Vfx和Sfx,现在它支持Oneshot,使它的用途变得更加广泛。
举例:我在制作战斗系统的近战Impact时,仅需要1个GameplayCue来播放武器打中角色/地面/物体时的vfx/sfx,根据角色的SourceTags和TagetTags的不同(装备不同的武器,是否防御,是否格挡),从而选择不同的Vfx/Sfx进行播放。
如何更新?
下载新Demo,参考文档中的迁移部分,然后覆盖内容即可。