|
动画混合这一概念实际上就是在单个 character 或骨骼网格体上的两个或更多动画之间进行流畅过渡。在虚幻引擎 4 中,可使用多种方法应用此类混合:即使用 混合空间,使用基于加权偏差或 alpha 值结合两个动画的叠加方法,或者直接应用现有姿势的覆盖。
您还可以将动画直接发送到骨架中的特定骨骼和其所有子对象。例如,您可以从 Character 奔跑的动画开始,然后选择性地将射击动画应用到该 Character 的上身区域。最终会生成奔跑和射击同时进行的 Character,本页面上的以下步骤将讲解此内容。
本页面的内容:
设置要混合的动画
更新 Character 蓝图
设置动画图表
调整混合设置
对于本指南,我们已经使用 Blueprint Third Person 模板创建了新项目,并启用了 默认资源。
我们还会使用 Animation Starter Pack,您可通过 商城 免费下载。
下载后,您可以从启动程序,通过 Add To Project 按钮将 Animation Starter Pack 添加到您的项目中。
设置要混合的动画
在本部分中,我们为玩家设置了 Character,并对将要用于移动动作的动画数据做一些修改。
打开项目,在 内容浏览器 中的 Game/ThirdPersonBP/Blueprints 文件夹下,打开 ThirdPersonGameMode 蓝图。
在 Default Pawn Class 下,单击下拉菜单,然后选择 Ue4ASP_Character。
编译 并 保存,然后关闭蓝图。
在 内容浏览器 中,打开 Game/AnimStarterPack 文件夹。
右键单击 Fire_Shotgun_Ironsights 动画,依次选择 Create 和 Create AnimMontage。
您可以通过在上图所示的搜索窗口中键入 “Fire” 来筛选窗口。
随意重命名 Montage,然后打开 Montage,单击放大镜图标。
此时将打开 Anim Slot Manager,我们将使用该管理器创建 Slot,这可在按资源文件名称调用 Slot 时用于混合。
单击 Add Slot 按钮,然后将 slot 命名为 UpperBody,然后 Save 并关闭窗口。
单击 Montage Group 部分中的下拉菜单,将其更改为 DefaultGroup.UpperBody,然后关闭窗口。
现在,我们已将此 Montage 与 DefaultGroup.UpperBody 关联,从而使其在调用 Slot 时播放。
更新 Character 蓝图
接下来,我们将更新 Character 蓝图,以便我们可以判断何时响应用户按下射击按钮。
在 内容浏览器 中的 Game/AnimStarterPack 下,打开 Ue4ASP_Character 蓝图。
找到 Crouching 部分,然后删除 InputAction Crouch 事件(带有 Warning!)符号。
此节点上存在警告,因为我们未将项目设置为使用 “Crouch” InputAction 事件。
在图表中 右键单击,然后添加 C 键事件,并如下图所示进行连接。
现在,我们已将 crouch 与 C 键按键事件关联,您可以随意更改此输入。
在 MyBlueprint 窗口中,单击 Add Variable 按钮以创建 Boolean 变量。
将变量命名为 Fire Button Down,然后单击眼睛图标以使变量公开。
在图表中 右键单击,然后添加 Left Mouse Button 按键事件。
按住 Alt,将 Fire Button Down 变量拖入图表,以创建 Set 节点。
重复以上步骤(或复制 Set 节点),然后如下图所示进行连接。
请确保 按下 鼠标左键 时 Fire Button Down 为 True,松开 时为 False。
编译 并 保存,然后关闭蓝图。
设置动画图表
在本部分中,我们将设置动画图表,然后将需要混合的节点放置在当前姿势和射击武器动画之间。
同样,在 Game/AnimStarterPack 下,打开 UE4ASP_HeroTPP_AnimBlueprint 动画蓝图。
在 MyBlueprint 窗口中,打开 AnimGraph。
从 Locomotion 状态机连出线来,然后搜索并添加 New Save cached pose。
此时,我们将从 Locomotion 状态机得到生成后的姿势,并将其存储于缓存姿势中,以便可以在其他地方使用。
为缓存姿势命名,如 LocomotionCache。
在图表中 右键单击,然后添加 Use cached pose 'LocomotionCache'(或您随意命名的缓存姿势)。
从 Use cached pose 节点连出线来,然后搜索并添加 Layered blend per bone 节点。
Layered Blend Per Bone 节点可让我们从骨架上的某个指定骨骼处起,将不同的动画混合在一起。
复制并粘贴 Use cached pose 'LocomotionCache' 节点,然后从中连出线来,添加 Slot 'DefaultSlot' 节点。
在 Slot 节点的 Settings 部分中,单击下拉菜单,然后选择 DefaultGroup.UpperBody。
将 Slot 连接到 Layered blend per bone 节点上的 Blend Poses 0 针,然后将后一节点的输出连接到 Result。
AnimGraph 完成了,但我们仍需修改 Layered blend per bone 节点上的某些设置。
调整混合设置
最后,我们要更新混合动画的方式,以使上身区域播放一个动画,同时下身区域播放另一个动画。
单击 Layered blend per bone 节点,然后展开 Layer Setup 部分,单击 + 号。
在 Bone Name 下输入 spine_01,然后将 Blend Depth 设置为 1,选中 Mesh Space Rotation Blend。
借助这些设置,我们可以从 spine_01 骨骼开始,将射击 AnimMontage 混合到骨架上。
在 MyBlueprint 窗口中,打开 EventGraph。
从 Cast To Ue4ASP_Character 节点的 As Ue 4ASP Character 针连出线来,然后添加 Get Fire Button Down 节点。
此处将告诉我们玩家是否按下射击按钮。
按住 B 键并在图表中 左键单击,以创建 Branch 节点,然后将该节点连接到 Set Crouching。
对于 Condition,将其插入 FireButtonDown 针。
在图表中 右键单击,然后添加 Montage Is Playing 节点。
将 Montage Is Playing 节点连接到 Branch 节点的 True。
对于 Montage,请选择您的 Montage (Fire_Shotgun_Ironsights_Montage)。
从 Montage Is Playing 节点的 Return Value 针连出线来,然后添加 Branch。
从新 Branch 节点的 False 针连出线来,然后添加 Montage Play 节点,并将 Montage to Play 设置为您的 Montage。
此操作将检查当前是否在播放 Montage,如果是,则不要播放 Montage(如果未播放,则播放 Montage)。
编译 并 保存,然后关闭 蓝图,并删除场景中现有的 ThirdPersonCharacter。
在编辑器中 播放。
现在,您将看到当按下 鼠标左键 时,character 将播放射击 AnimMontage。您可以在射击时四处走动,您甚至还可以蹲伏(按 C 键)并射击。
可以使用相同方法来设置近战攻击动作或武器换弹动作的表现,正如上述的第八个步骤中一样,通过创建一个所需要动画的相应 AnimMontage 并和移动动画去混合,并将这个新创建的 AnimMontage 设置于 UpperBody 的 Slot 上。因为 Slot 是在 character 动画蓝图的 AnimGraph 中设置的,所以应用于该 Slot 的任何动画都将被动画图表中进行计算,并在调用时被混合计算。
相关页面
动画蓝图
AnimMontage
混合节点
混合动画
|
|