介绍
GMS包含两种类型的叠层系统,本文更详细的展示一些叠层制作案例。
基于栈的叠层系统
这是基于栈的叠层系统的案例,取自配套项目中的Overlay_Mannequin
叠层设置。
Sword叠层
采用OverlayStack方式制作剑盾的Locomotion。
下图是以MovementSet.Unarmed(Lyra的Unarmed的Locomotion)为基础,并以Paragon的Greystone的动作来混合出的剑/盾动作。

其中第一层是在非待机状态下,在角色的上半身播放剑/盾的移动动作。

第二层则是在待机状态下,在角色的上半身播放剑/盾的待机动作。

下图是混合出的效果:
条件性叠层
同样采用OverlayStack方式制作叠层,但是这次是具备特定条件时动态选择动画进行混合。
下图配置在了在地面情况下,满足条件时,在不同部位播放不同的动作混合。

第一层是默认情况下(无条件),在角色上半身播放Dance动画。

第二层则是在Injured状态下,在角色的左手部位播放Injured动画。

第三层则是在Handtied状态下,在角色的上半身播放手被捆绑的动画。

然后我在关卡中设置了两个触发器,分别为角色添加10秒的Injured状态和5秒的HandTied状态。

在叠层设置为OverlayMode.Demo的情况下,效果如下:
你可以看到,如果同时有Injured和HandTied状态,会优先播放HandTied(因为它是Overlays数组中优先级最高的动作),当HandTied状态消失后,又会回到Injured的状态,当Injured状态小时候,则回到上半身跳舞的动作。
视频参考
基于姿势的叠层系统
概述
此叠层系统的关键在于:在不同的情况下,采用不同姿态的单帧Pose并与基础的Locomotion动画进行混合,同时通过动画曲线来控制混合的权重。如果你使用过ALS,你应该对此很熟悉。但在GMS中,对这一项功能进行了改进。
为姿势添加曲线修改器
GMS提供一个动画修改器:AM_CreateLayeringCurves帮助你快速创建动画曲线。
曲线说明

非Additive的曲线:
决定该部位的Pose的采用程度(开关,比如LayerArmLeft=0就完全不用左臂的Pose,LayerArmLeft=1就是完全采用左臂的Pose)。
带Additive的曲线:
决定当前的Locomotion在叠了一层Pose后的保留程度(LayerArmLeftAdditive=1表示Pose完全覆盖了左手动作,LayerArmLeftAdditive=0.5表示Locomotion还会保留一半)。
案例
这是基于姿势的叠层系统的案例,取自配套项目中的MS_Mannequin_ALS
。
使用基于姿势的动画Overlay层
首先,在你的运动集设置上,你应该选择“GMS Anim Layer Setting Overlay Pose Based”。

然后你可以为其添加多个OverlayModes,你应该在你的游戏中,根据切换不同的武器从而切换不同的OverlayMode。

Bow的叠层(简单类型)
这个叠层采用的是简单类型。

当OverlayMode为Bow时,会以BasePose为基础,然后在Idle时用A_GMS_Bow_Poses在时间为0.15那一帧的动作与当前的Locomotion动作进行混合。在移动时,用A_GMS_BowPoses在时间为0.183那一帧的动作与当前的Locomotion动作进行混合。
没有OverlayMode时的效果:
开启Bow OverlayMode时的效果:
你只通过2个单帧动画就实现了这个效果,而不需要一整个动画包!
分层的叠加姿势(复杂类型)
除了简单版本,你还可以使用复杂版本,即采用LayeredPoseSetting,它会根据角色当前的Tags从上往下查找第一个满足条件的姿势并应用。

效果如下:
当然,你需要根据你的游戏,进行更有意义地配置。
拿弓箭手举个例子:在某些情况下,比如警戒情况下,弓箭手持弓的姿态会动态进行改变。
如果你愿意添加多个OverlayMode,那么你也可以不需要采用分层的叠加姿势。
从头创建新的OverlayMode
你也可以查看此视频得知我是如何从头创建新的叠层模式的(从3.05分开始观看):
如何选择?
大多数情况下,你可以混用两者,即:
- 你有多个动画包,但是动画包A有一些动画包B没有的动作,而动画包B又有一些动画包A没有的动作,这时候你可以通过栈叠层来弥补之间的缺失。
- 你也可以有一个质量较高的徒手动画包,且比较中性,然后采用徒手运动集设置配合多个不同的OverlayMode,实现不同姿态的动作。
你甚至可以:
- 一个运动定义中的不同的运动集采用不同的叠层系统。
- 外部系统去影响角色的动画表现,比如给予角色不同的Buff,从而添加不同的GameplayTags并影响动画;比如角色在不同的天气区域,给予角色不同的GameplayTags,并让角色动作对天气作出反应。
如果你满足如下情况,更倾向于使用栈叠层:
- 你有来自不同作者的不同动画包,或者你有专门的动画师。
- 你需要通过不同的动作去展示角色的个性。
如果你满足如下情况,更倾向于使用姿势叠层:
- 你有一个质量较高的徒手动画包,且比较中性。
- 你资金短缺,更注重功能性而不是个性化。