目录
前言
前面我们创建角色类、敌人类和角色蓝图、敌人蓝图,并为其添加了武器组件,但现在如果把角色放到关卡中,角色会比较呆板,所以本章节我们为角色添加上动画效果。
同样先由角色开始。
角色的动画一般由蓝图实现,称之为动画蓝图。
角色动画蓝图
Content - Blueprints - Character - Aura 下面右键,选择 Animation - Animation Blueprint,列表中再选择 SK_Aura,即以 SK_Aura 骨骼网络为动画蓝本创建角色的动画蓝图。
角色动画蓝图命名为 ABP_Aura,创建成功后双击打开。
由于角色在关卡中会有不同的状态,不同状态下角色会有不同的动作或动画,所以我们需要创建一个状态机。
在动画蓝图空白处,右键搜索 state machine,选择State Machine,命名为 Main States,如下图所示。

将状态机与输出连接前,还需要在中间加一个 Slot,Slot 是用来播放蒙太奇的,这里先不做过多介绍,后面会详细说。
创建 Slot 方法同状态机差不多,右键空白处,搜索 default slot,选择 Slot 'DefalutSlot',然后将状态机,Slot 和 Output Pose 依次连接起来。
状态机有了,但是还需要定义角色有哪些状态,双击状态机,进到状态机编辑界面,会默认看到一个 Entry 节点,从它右侧拖拽会弹出节点选择窗口,选择 Add State,命名为 IdleWalkRun。这样我们就为角色状态机添加了一个状态节点。
切换到 ABP_Aura 蓝图编辑界面,在右侧 Assets Browser 中找到名字同为 IdleWalkRun 的动画资源,拖到空白处,并将其输出连接到 Output Animation Pose 的输入。
我们可以看到,拖进来的动画节点是需要有输入 Speed,所以点击上面 Event Graph 页签,并定义我们需要的变量。
角色的速度属性可以通过角色蓝图来获得,在 ABP_Aura 蓝图中默认有 Try Get Pawn Owner 组件,右侧拉出选择 Cast to BP_AuraCharacter 就得到了我们的角色蓝图对象,再从 As BP Aura Character 引脚拖出,选择 Promote to variable (提取为变量),将该变量命名为 BP_Aura_Character,再从该变量输出引脚拉出,选择 Get Character Movement,同样将其提取为变量,命名为 CharacterMovement。最后用 Event Blueprint Initialize Animation 事件串联起来。

这样我们可以在左侧 My Blueprint 页签中 Components 下看到角色蓝图和角色运动变量。左键将角色蓝图变量拖拽到编辑区域空白处,选中并右键,选择 Convet to Validated Get。同样将角色运动变量也拖拽到空白处,从角色运动变量中提取 Get Velocity,再从 Velocity 中提取 Vector Length XY,将其 Promote to Variable,命名为 GroundSpeed,最后用 Event Blueprint Initialize Animation 事件串联起来,如下图所示。

切换到 IdleWalkRun 页签,将 GroundSpeed 变量拖进空白处,与 IdleWalkRun 节点输入相连。这样我们就有了角色的二维速度作为该状态的输入了。
回到 BP_AuraCharacter 蓝图,选中 Mesh 节点,右侧 Animaion - Anim Class 设置为 ABP_Aura。便可以在预览界面看到,我们的角色目前处于 IdleWalkRun 状态,并播放该动画。
敌人动画蓝图
我们知道,在游戏中主角只有一个(大部分),但是敌人却有很多个,且多种多样。所以为了避免为每一种敌人都设置一遍动画,就需要添加一个通用动画模板,以节省大量重复工作。
敌人通用动画蓝图模板
还记得在创建角色动画蓝图时,默认选择的是 Specific Skeleton 页签下的 SK_Aura吗?既然我们想创建通用模板,就不能用同样的方法。幸好 UE 为我们提供了模板蓝图类,在创建动画蓝图时选择 Template,点击 Create,并命名为 ABP_Enemy。

既然是通用动画蓝图模板,肯定与角色动画蓝图不太一样。在我们创建的 ABP_Enemy 蓝图中,同样添加状态机,用 Slot 与 Output Pose 连接。双击状态机,进到状态机编辑界面,这里我们不会像角色蓝图状态机那样,直接把 IdleWalkRun 动画资源拖拽进来,而是右键空白处,搜索 blend space player。

Blend Space Player 是一个通用节点,其输出连接到 Output Animation Pose 的输入。而当我们从这个通用动画模板蓝图创建子动画蓝图时,只需选择这个 Blend Space Player 即可。
Blend Space Player 有 x, y 输入,这里我们只用到 x。
同样,这里需要获取敌人的运动参数作为输入,跟角色动画蓝图一样,需要要从敌人蓝图中提取,并定义为 GroundSpeed 变量。

将 GroundSpeed 变量的输出与 Blend Space Player 的 x 输入引脚相连。

敌人动画蓝图
有了通用动画蓝图模板,再创建敌人动画蓝图时,就可以选择 Specific Skeleton 下面的 Parent Class 了。Parent Class 当然是刚刚创建的 ABP_Enemy蓝图。同时选择 SK_Goblin 作为动画蓝图的骨骼网络,命名为 ABP_Goblin_Spear(拿长矛的哥布林动画蓝图)。

创建好动画蓝图后,就不需要再像角色蓝图那样创建状态,以及状态动画了,只需要在 ABP_Goblin_Spear 动画蓝图中,选择 Asset Override Editor,配置 IdleWalkRun 状态的 Blend Space Player 为 BS_GoblinSpear_IdleRun(动画资源)即可。

切换到 BP_Goblin_Spear 蓝图(如果你已经创建的话),将其 Anim Class 设置为 ABP_Goblin_Spear 即可实现编辑界面的预览效果。
总结
有了角色动画蓝图,敌人通用动画蓝图模板,我们还可以创建其它种类敌人的蓝图及动画蓝图,但在创建其它敌人动画蓝图时可以继承通用动画蓝图模板,剩余只需更换模型和调整动画资源即可,节省大量工作。
下一章节我们为角色增加(增强)输入系统,有了输入系统,玩家才可以控制我们创建的角色。