- 动画是传达运动的关键。如果没有动画,角色看起来像是在滑动而不是奔跑
- 学习目标:
- 导入带有骨骼的网格
- 导入动画
- 创建动画蓝图以过渡到不同的动画
- 动画之间的混合
- https://koenig-media.raywenderlich.com/uploads/2017/09/SkywardMuffinStarter.zip
1.骨骼
- 在3D应用程序中,骨骼是一组相互连接的点,称为关节。
- 通过操控关节,可以为角色创造不同的姿势
-
1.导入骨骼网格
Create Physics Asset
:创建物理资产Import Materials
:导入材质Import Textures
: 导入纹理**SK_Muffin**
:骨骼网格资产,基本上只是一个网格连接到一个骨骼资产**SK_Muffin_Skeleton**
:骨骼资产。包含一个关节列表和其他信息,比如层次结构。2.使用骨骼网格
在
Material Slots
中为SK_Muffin
分配M_Muffin
材质。使用
SK_Muffin
作为玩家角色:打开BP_Muffin
,在Details
-Mesh
将Skeletal Mesh
设置为SK_Muffin
,编译后完成。效果如下:
3.导入动画
- 在导入窗口中,转到
Mesh
部分并取消选中Import Mesh
选项,确保骨骼网格不会再次导入 - 确保骨骼属性设置为
SK_Muffin_Skeleton
,这将指定动画将使用哪个骨骼。 - 勾选
Import All
,导入具有指定的设置的所有动画。 - 使用动画蓝图来播放所有动画。
2.动画蓝图
1.创建动画蓝图
- 动画蓝图具有专门用于动画任务的图形
- 在
内容浏览器
中,单击添加新按钮,选择Animation
—Animation Blueprint
- 在弹出窗口中,选择
SK_Muffin_Skele
创建动画蓝图 将资产重命名为
ABP_Muffin
,然后双击打开Animation Blueprint Editor
2.动画蓝图编辑器
Animation Blueprint
编辑器类似于Blueprint
编辑器,但是有四个额外的面板:**Anim Graph/动画图表**
:专用于动画的图表,动画将于此处播放**Preview Scene Settings/预览场景设置**
: 在此面板调整视窗的预览场景**Anim Preview Editor/动画预览编辑器**
:创建的变量在此显示,使用此面板预览变量对最终动画的影响**Asset Browser/资产浏览器**
:此面板包含当前框架可以使用的动画列表- 使用
State Machine/状态机
定义每个动画应当何时播放
3.状态机
1.概述
State Machine
:状态机主要由状态网络和定义进出状态转换的规则组成,每个状态和规则都是其自己的精简蓝图网络。这使得处理复杂的动画混合变得非常容易,而不必使用过于复杂的动画蓝图- 状态机允许将骨骼动画分解为各种状态,并完全控制混合如何从一个状态到另一个状态。状态机一次只能处于一种状态,要过渡到一种不同的状态,必须满足某些条件(由规则定义)
状态也可以有一个双向的关系,如果没有双向的关系,字符只能从空闲状态进入跳转状态。
2.创建状态机
在
**Anim Graph**
,添加**Add New State Machine**
,添加新的状态机。- 该操作将向动画图表中添加一个状态机节点,将状态机重命名为
**Locomotion**
。然后将**Locomotion**
状态机连接到**Output Pose/输出节点**
- 现在,
Locomotion
运动机将决定物体的最终动画,双击打开它 - 连接到
Entry
节点的状态是默认状态。对于本教程,默认状态是空闲动画,通过右键单击图表上的空白区域创建此状态。从菜单中选择AddState
并命名为Idle
。并将Entry
节点和Idle
状态完成相连 -
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**
- 现在骨骼网格将使用
ABP_Muffin
作为它的动画蓝图 - 编译完成后,由于
Idle
是默认状态,因此物体将自动使用空闲动画
4.创建跳跃和降落状态
1.添加状态
- 返回
ABP_Muffin
,然后切换回Locomotion
状态机的图形 - 与创建状态然后链接动画不同,已经链接动画的状态可以直接进行使用
- 在
**Locomotion**
中添加**SK_Muffin_Jump**
状态,重命名为**Jump**
- 在
**Locomotion**
中添加**SK_Muffin_Fall**
状态,重命名为**Fall**
- 将这些状态彼此链接起来,创建以下过渡:
- Idle 到 Jump
- Jump 到 Fall
- Fall 到 Jump
- Fall 到 Idle
此时已经有了转换,但需要定义何时可以发生转换。通过使用转换规则来实现这一点。
2.转换规则
这个图标代表了转换规则
- 每个转换规则都包含一个带有单个布尔输入的
**Result**
节点 - 如果该输入的是True,则可能发生转换
-
3.检查玩家的运动状态
分别创建名为
**IsJumping**
和**IsFalling**
的布尔变量- 设置
**IsJump**
的值,切换到事件图并找到事件蓝图更新动画节点,此节点的功能类似于**Event Tick**
节点 - 若要检查玩家是否正在跳跃,创建以下设置
- 检查玩家在Z轴上的速度是否大于0,如果大于 0 的话,那么
**Is Jumping**
将被设置为 Ture,玩家正在跳跃。如果小于 0 的话,那么**Is Faling**
将被设置为True,玩家将会下落。 -
4.定义转换规则
**Idle to Jump**
规则为:**Jump to Fall**
规则为:**Fall to Jump**
规则为:**Fall to Idle**
规则为:要过渡到**Idle**
状态,玩家不能处于跳跃或下降状态。因此需要使用**NOR**
节点**NOR**
节点只有两个输入都为False时才会返回True
5.混合空间
- 混合空间是动画资产的一种类型,它根据输入值在不同动画之间进行插值。
-
1.创建混合空间
Add New
—Animation
—Blend Space 1D
- 在内容浏览器中,添加混合空间1D
- 在弹出窗口中,选择
SK_Muffin_Skeleton
- 将该资产重命名为
**BS_IdleWalk**
,打开后可以看见**Blend Space Editor**
,这里将添加动画
2.向混合空间添加动画
- 更改轴值(输入)的名称,转到
**AssetDetails**
面板并找到**AxisSetting**
部分,并将**Horizontal Axis**
—**Name**
属性重命名为**Speed**
。 - 添加动画,拖动
SK_Muffin_Idle
动画,并将其移动到Blend Space
网格的左侧,以使其对齐0.0
值 - 然后添加
SK_Muffin_Walk
动画,使其对齐右侧100.0
值 - 混合空间将根据输入值混合
Idle
和Walk
动画,如果输入是 0 ,则只播放Idle
动画,如果输入时 100,则只播放步行动画。任何介于两者之间的都是混合的
3.使用混合空间
- 关闭
BS_IdleWalk
并打开ABP_Muffin
,切换到Locomotion
状态机 - 打开
Idle
状态,删除**Play SK_Muffin_Idle**
节点 - 添加
BS_IdleWalk
混合空间,并将BS_IdleWalk
节点连接到Output Animation Pose
节点 BS_IdleWalk
将自动播放,因为它是默认状态。它的速度输入保持在0,因此它只显示Idle
动画- 需要将输入速度提供给该节点。
4.获取玩家的速度
- 创建名为
Speed
浮点型变量 - 向
Sequence
节点添加一个新的节点,然后向其添加突出显示的节点: - 通过
Get Velocity
—VectorLength
—Set Speed
节点,将不断设置Speed变量 - 切换回
Idle
状态图,将Speed
变量连接到BS_IdleWalk
节点的Speed
输入 BS_IdleWalk
将在Idle
和Walk
动画之间进行混合
5.死亡动画
思路:使用**Blend Poses by bool**
节点,此节点可以根据输入布尔值在两个动画之间切换。