1.骨骼

  • 在3D应用程序中,骨骼是一组相互连接的点,称为关节。
  • 通过操控关节,可以为角色创造不同的姿势
  • 在虚幻引擎中,任何带有骨骼的网格都是骨骼网格。

    1.导入骨骼网格

  • image.png

  • Create Physics Asset:创建物理资产
  • image.png
  • Import Materials:导入材质
  • Import Textures: 导入纹理
  • image.png
  • **SK_Muffin**:骨骼网格资产,基本上只是一个网格连接到一个骨骼资产
  • **SK_Muffin_Skeleton**:骨骼资产。包含一个关节列表和其他信息,比如层次结构。

    2.使用骨骼网格

    Material Slots中为SK_Muffin分配M_Muffin材质。
    image.png

  • 使用SK_Muffin作为玩家角色:打开BP_Muffin,在Details-MeshSkeletal Mesh设置为SK_Muffin,编译后完成。效果如下:

06-虚幻引擎4:动画教程 - 图5

3.导入动画

  • image.png
  • 在导入窗口中,转到Mesh部分并取消选中Import Mesh选项,确保骨骼网格不会再次导入
  • 确保骨骼属性设置为SK_Muffin_Skeleton,这将指定动画将使用哪个骨骼。
  • image.png
  • 勾选Import All,导入具有指定的设置的所有动画。
  • 使用动画蓝图来播放所有动画。

2.动画蓝图

1.创建动画蓝图

  • 动画蓝图具有专门用于动画任务的图形
  • 内容浏览器中,单击添加新按钮,选择AnimationAnimation Blueprint
  • image.png
  • 在弹出窗口中,选择SK_Muffin_Skele创建动画蓝图
  • image.png
  • 将资产重命名为ABP_Muffin,然后双击打开Animation Blueprint Editor

    2.动画蓝图编辑器

  • Animation Blueprint编辑器类似于Blueprint编辑器,但是有四个额外的面板:

  • image.png
  • **Anim Graph/动画图表**专用于动画的图表,动画将于此处播放
  • **Preview Scene Settings/预览场景设置**: 在此面板调整视窗的预览场景
  • **Anim Preview Editor/动画预览编辑器**创建的变量在此显示,使用此面板预览变量对最终动画的影响
  • **Asset Browser/资产浏览器**此面板包含当前框架可以使用的动画列表
  • 使用State Machine/状态机定义每个动画应当何时播放

3.状态机

1.概述

  • State Machine:状态机主要由状态网络和定义进出状态转换的规则组成,每个状态和规则都是其自己的精简蓝图网络。这使得处理复杂的动画混合变得非常容易,而不必使用过于复杂的动画蓝图
  • 状态机允许将骨骼动画分解为各种状态,并完全控制混合如何从一个状态到另一个状态。状态机一次只能处于一种状态,要过渡到一种不同的状态,必须满足某些条件(由规则定义)
  • 状态也可以有一个双向的关系,如果没有双向的关系,字符只能从空闲状态进入跳转状态。

    2.创建状态机

  • **Anim Graph**,添加**Add New State Machine**,添加新的状态机。

  • image.png
  • 该操作将向动画图表中添加一个状态机节点,将状态机重命名为**Locomotion**然后将**Locomotion**状态机连接到**Output Pose/输出节点**
  • image.png
  • 现在,Locomotion运动机将决定物体的最终动画,双击打开它
  • 连接到Entry节点的状态是默认状态。对于本教程,默认状态是空闲动画,通过右键单击图表上的空白区域创建此状态。从菜单中选择AddState并命名为Idle。并将Entry节点和Idle状态完成相连
  • 06-虚幻引擎4:动画教程 - 图13

    3.将动画链接到状态

  • 双击Idle状态打开它

  • 要链接动画,需要转到Ass Browser然后拖动SK_Muffin_Idle动画,释放左键单机图表中的空白区域以添加它。
  • Play SK_Muffin_Idle节点连接到Output Animation Pose节点
  • 使用动画蓝图,需要更新BP_Muffin,编译后切换到BP_Muffin

    4.使用动画蓝图

  • **BP_Muffin****Components**面板,选择**Mesh(Inherited)**组件,找到**Animation**部分

  • 设置动画模式**Use Animation Blueprint**,下一步设置动画类为**ABP_Muffin**
  • image.png
  • 现在骨骼网格将使用ABP_Muffin作为它的动画蓝图
  • 编译完成后,由于Idle是默认状态,因此物体将自动使用空闲动画
  • 06-虚幻引擎4:动画教程 - 图15

4.创建跳跃和降落状态

1.添加状态

  • 返回ABP_Muffin,然后切换回Locomotion状态机的图形
  • image.png
  • 与创建状态然后链接动画不同,已经链接动画的状态可以直接进行使用
  • **Locomotion**中添加**SK_Muffin_Jump**状态,重命名为**Jump**
  • **Locomotion**中添加**SK_Muffin_Fall**状态,重命名为**Fall**
  • 将这些状态彼此链接起来,创建以下过渡:
    • Idle 到 Jump
    • Jump 到 Fall
    • Fall 到 Jump
    • Fall 到 Idle
  • image.png
  • 此时已经有了转换,但需要定义何时可以发生转换。通过使用转换规则来实现这一点。

    2.转换规则

  • image.png 这个图标代表了转换规则

  • 每个转换规则都包含一个带有单个布尔输入的**Result**节点
  • image.png
  • 如果该输入的是True,则可能发生转换
  • 创建变量,当玩家跳跃或下降时,在转换规则中使用这些变量

    3.检查玩家的运动状态

  • 分别创建名为**IsJumping****IsFalling**布尔变量

  • 设置**IsJump**的值,切换到事件图并找到事件蓝图更新动画节点,此节点的功能类似于**Event Tick**节点
  • image.png
  • 若要检查玩家是否正在跳跃,创建以下设置
  • 检查玩家在Z轴上的速度是否大于0,如果大于 0 的话,那么**Is Jumping**将被设置为 Ture,玩家正在跳跃。如果小于 0 的话,那么 **Is Faling**将被设置为True,玩家将会下落。
  • image.png

    4.定义转换规则

  • **Idle to Jump**规则为:image.png

  • **Jump to Fall**规则为:image.png
  • **Fall to Jump**规则为:image.png
  • **Fall to Idle**规则为:要过渡到**Idle**状态,玩家不能处于跳跃或下降状态。因此需要使用**NOR**节点image.png
  • **NOR**节点只有两个输入都为False时才会返回True

5.混合空间

  • 混合空间是动画资产的一种类型,它根据输入值在不同动画之间进行插值。
  • 混合空间还可以帮助简化状态机

    1.创建混合空间

  • Add NewAnimationBlend Space 1D

  • 在内容浏览器中,添加混合空间1D
  • 在弹出窗口中,选择SK_Muffin_Skeleton
  • image.png
  • 将该资产重命名为**BS_IdleWalk**,打开后可以看见**Blend Space Editor**,这里将添加动画
  • image.png

2.向混合空间添加动画

  • 更改轴值(输入)的名称,转到**AssetDetails**面板并找到**AxisSetting**部分,并将**Horizontal Axis****Name**属性重命名为**Speed**
  • image.png
  • 添加动画,拖动SK_Muffin_Idle动画,并将其移动到Blend Space网格的左侧,以使其对齐0.0
  • 然后添加SK_Muffin_Walk动画,使其对齐右侧100.0
  • image.png
  • 混合空间将根据输入值混合IdleWalk动画,如果输入是 0 ,则只播放Idle动画,如果输入时 100,则只播放步行动画。任何介于两者之间的都是混合的

3.使用混合空间

  • 关闭BS_IdleWalk并打开ABP_Muffin,切换到Locomotion状态机
  • 打开Idle状态,删除**Play SK_Muffin_Idle**节点
  • 添加BS_IdleWalk混合空间,并将BS_IdleWalk节点连接到Output Animation Pose节点
  • image.png
  • BS_IdleWalk将自动播放,因为它是默认状态。它的速度输入保持在0,因此它只显示Idle动画
  • 需要将输入速度提供给该节点。

4.获取玩家的速度

  • 创建名为Speed浮点型变量
  • Sequence节点添加一个新的节点,然后向其添加突出显示的节点:
  • image.png
  • 通过Get VelocityVectorLengthSet Speed节点,将不断设置Speed变量
  • 切换回Idle状态图,将Speed变量连接到BS_IdleWalk节点的Speed输入
  • image.png
  • BS_IdleWalk将在IdleWalk动画之间进行混合

5.死亡动画

思路:使用**Blend Poses by bool**节点,此节点可以根据输入布尔值在两个动画之间切换。

1.检查玩家是否死亡

  • 返回ABP_Muffin并创建名为IsDead的布尔变量
  • Sequence节点添加一个新的引脚,完成以下连接
  • image.png
  • Isdead变量将由玩家的死亡状态设置

    2.通过Bool节点使用Blend Poses

  • 返回Anim Graph并添加SK_Muffin_Death动画,选中后在Details面板取消Loop Animation属性

  • **Loop Animation**为Flase时,该动画只播放一次
  • 创建Blend Poses by bool节点,并在DetailsOption界面勾选Reset Child on Activation属性
  • image.png
  • Reset Child on Activation属性将确保动画在重置之前播放
  • 完成连接
  • image.png